问题描述
在示例 Qt 应用程序中,我创建了一个 QMainWindow
,其中一个 QTableView
作为其中心小部件(请参阅问题末尾的代码)。
重要的是,计算主窗口的大小以适合表格:
但是,如果我添加状态栏,则不再计算大小以完全适合表格。有一点点table被隐藏了,提示table view添加滚动条:
这似乎不应该发生。仅添加状态栏不应阻止主窗口相应地适应其内容。
如何在无需手动计算必要大小的情况下避免这种情况(这当然不容易维护,因为每次窗口中的设计和小部件更改时都必须重新计算)?
代码如下。它在 PyQt 中,但不是特定于 Python 的,我相信在 C++ 中也会出现同样的问题。
import sys
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication,QMainWindow,QTableView,QStatusBar
use_status_bar = False # includes a status bar; but also messes up the size adjustment
class TableModel(QtCore.QAbstractTableModel):
def __init__(self):
super().__init__()
def data(self,index,role=None):
if role == Qt.displayRole:
return 42
def rowCount(self,index):
return 10
def columnCount(self,index):
return 4
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setwindowTitle("A simple table app")
self.tableView = QTableView()
self.model = TableModel()
self.tableView.setModel(self.model)
self.tableView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
if use_status_bar:
self.setStatusBar(QStatusBar(self))
self.setCentralWidget(self.tableView)
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
解决方法
在 PyQt5-5.15.1
中,如果您添加
self.tableView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.tableView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
(否则表格左侧和底部会有两个空白区域)。
您使用哪个版本或PyQt5
?