QTableView - 使用布局获得正确的大小[重复]
Posted
技术标签:
【中文标题】QTableView - 使用布局获得正确的大小[重复]【英文标题】:QTableView - getting the correct size with layouts [duplicate] 【发布时间】:2016-02-17 18:16:26 【问题描述】:我有一个 QTableView,它显示来自 sqlite 数据库的一些数据(当前为 2 行和 2 列)。 QTableView 位于 QFrame 内部,而 QFrame 又是 QMainWindow 的中心部件。 QFrame 使用 QVBoxLayout。问题是当我将 QTableView 添加到 QVBoxLayout 时,给 QTableView 的空间太多。从图片中可以看出,最后一列右边有一个空格,最后一行下面有一个空格。
我在 tableView 和 QFrame 上尝试了不同的 SizePolicies、resize()、sizeHints(),但似乎没有任何效果。我没有更改默认 SizePolicy 或任何东西。现在,我可以使用in this question 建议的解决方案(计算表格的高度和宽度并设置表格视图的最大尺寸),它甚至是我的应用程序可以接受的解决方案。但问题是不应该为 tableView 提供所有默认 sizePolicies 的适量空间吗?我的意思是,我是否做错了什么导致这种行为发生?
图片:
代码:
import sys
from PySide import QtGui, QtSql, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
def initUI(self):
#-------
#CREATE WIDGETS
#-------
frame = QtGui.QFrame()
someLabel = QtGui.QLabel("SomeLabel")
someOtherLabel = QtGui.QLabel("SomeOtherLabel")
self.tableView = QtGui.QTableView()
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('database.db')
db.open()
tableViewModel = QtSql.QSqlQueryModel()
tableViewModel.setQuery('SELECT currencySymbol, balanceAmount FROM cashBalances', db)
tableViewModel.setHeaderData(0, QtCore.Qt.Horizontal, "Currency") #set column names
tableViewModel.setHeaderData(1, QtCore.Qt.Horizontal, "Balance")
self.tableView.setModel(tableViewModel)
#--------
#CREATE LAYOUT
#--------
self.setCentralWidget(frame)
frameLayout = QtGui.QVBoxLayout()
frameLayout.addWidget(someLabel)
frameLayout.addWidget(self.tableView)
frameLayout.addWidget(someOtherLabel)
frame.setLayout(frameLayout)
self.show()
def main():
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】:
所有可滚动视图都以这种方式运行。添加/删除项目时,列表小部件不会调整大小 - 您希望它这样做吗? @ekhumoro 当我从布局中删除 QTableView 时,MainWindow 变得一样小,可以很好地适合两个标签(任何地方都没有多余的空间,它很适合)。这就是为什么我认为 QTableView 会考虑我正在显示的行/列的数量,并分配足够的空间来完美地适应所有内容。在我的示例中,可以显示 6 行(我认为)而不会使 QTableView 变得可滚动。但感谢您的评论,据我所知,当我将 QTableView 添加到布局时,它有一些默认大小,我必须自己调整大小。 【参考方案1】:对于列,您的问题可以轻松解决。对于行,这取决于您想要什么。
您可以指定哪些列应该拉伸(如果不是很多)。为此,您通常使用标题视图,例如
horizontalHeader()->setStretchLastSection(true);
或
horizontalHeader()->setResizeMode(0 /* first column */, QHeaderView::Stretch);
也许您可以对行执行类似的操作,但您到底想要什么?将行拉伸到全高可能不是那么好。标签也不应该拉伸。如果您只想要一些既不被表格或标签使用的区域,并且该区域应位于表格下方,您可以尝试插入间隔项。
我知道这类事情有点烦人……第一步应该始终是使用标题视图。
【讨论】:
正交:使用sizeAdjustPolicy(QAbstractScrollArea::AdjustToContents)
。以上是关于QTableView - 使用布局获得正确的大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章