QTableView-通过布局获得正确的大小
我有一个QTableView,它显示sqlite数据库中的一些数据(目前有两行两列)。QTableView位于QFrame内,QFrame又是QMainWindow的中心小部件。QFrame使用QVBoxLayout。问题是当我将QTableView添加到QVBoxLayout时,给QTableView的空间太大了。如图所示,最后一列的右边有一个空格,最后一行的下面有一个空格 我在tableView和QFrame上尝试了不同的SizePolicy、resizes()、sizeHints(),但似乎没有任何效果。我没有更改默认大小策略或任何东西。现在,我可以使用建议的解决方案(计算表格的高度和宽度,并设置表格视图的最大大小),这甚至是我的应用程序可以接受的解决方案。但是问题是,在所有默认的SizePolicy中,tableView不应该被赋予适当的空间吗?我是说,我做错了什么导致这种行为发生吗 图片: 守则:QTableView-通过布局获得正确的大小,qt,pyqt,pyside,Qt,Pyqt,Pyside,我有一个QTableView,它显示sqlite数据库中的一些数据(目前有两行两列)。QTableView位于QFrame内,QFrame又是QMainWindow的中心小部件。QFrame使用QVBoxLayout。问题是当我将QTableView添加到QVBoxLayout时,给QTableView的空间太大了。如图所示,最后一列的右边有一个空格,最后一行的下面有一个空格 我在tableView和QFrame上尝试了不同的SizePolicy、resizes()、sizeHints(),但似
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()
对于专栏,您的问题可以很容易地解决。对于行,这取决于您想要什么 如果列不多,可以指定哪些列应拉伸。为此,通常使用标题视图,例如
horizontalHeader()->setStretchLastSection(true);
或
也许您可以对行执行类似的操作,但您到底想要什么?将行拉伸到最大高度可能没有那么好。标签也不应该拉伸。如果您只需要表格或标签未使用的某个区域,并且该区域应位于表格下方,则可以尝试插入间隔项
我知道这类事情有点烦人。。。第一步应该始终使用标题视图。所有可滚动视图都以这种方式工作。当添加/删除项目时,列表小部件不会调整大小-您希望它调整大小吗?@ekhumoro当我从布局中删除QTableView时,主窗口会变得非常小,非常适合两个标签(没有额外的空间,它非常适合)。这就是为什么我认为QTableView会考虑显示多少行/列,并分配足够的空间来完美地容纳所有内容。在我的示例中,可以显示6行(我认为),而不必使QTableView变得可滚动。但感谢您的评论,据我所知,当我将QTableView添加到布局时,它有一些默认大小,我必须自己调整大小。正交:使用
sizedJustPolicy(QAbstractScrollArea::AdjustToContent)
。
horizontalHeader()->setResizeMode(0 /* first column */, QHeaderView::Stretch);