我有一个QTableView,它显示来自sqlite数据库的一些数据(目前有2行和2列)。 QTableView位于QFrame中,而QFrame又是QMainWindow的中心小部件。 QFrame使用QVBoxLayout。问题是,当我将QTableView添加到QVBoxLayout时,给QTableView提供了太多空间。从图片中可以看出,最后一列有一个空格,最后一列有一个空格。
我在tableView和QFrame上尝试了不同的SizePolicies,resizes(),sizeHints(),但似乎没有任何效果。我没有更改默认的SizePolicy或任何东西。现在,我可以使用建议的解决方案in this question(计算表的高度和宽度以及设置tableview的最大大小),它甚至可以作为我的应用程序的可接受的解决方案。但问题是,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()
答案 0 :(得分:0)
您可以轻松解决问题。对于行,它取决于你想要的东西。
如果不是很多,您可以指定哪些列应该拉伸。为此,您通常使用标题视图,例如
horizontalHeader()->setStretchLastSection(true);
或
horizontalHeader()->setResizeMode(0 /* first column */, QHeaderView::Stretch);
可能你可以为行做类似的事情,但你想要什么呢?将行拉伸到完整高度可能不是那么好。并且标签也不应该伸展。如果您只想要一些既不被表格或标签使用的区域,并且该区域应位于表格下方,您可能会尝试插入间隔项目。
我知道这些事情有点烦人......第一步应该始终是使用标题视图。