我正在尝试创建一个包含QTableView的主窗口(固定大小),上面和下面都有QSpacerItems,以便集中(垂直)表格。
(抱歉,显然无法发布图片)。
我有一个QVBoxLayout,我有一个垂直间隔,QTableView和另一个垂直间隔。我已经为所有三个小部件使用了QSizePolicy的所有组合,但我无法在没有滚动条的情况下显示该表。 (我不能使用Qt.ScrollBarAlwaysOff,因为如果项目数超过主窗口的大小,将需要它们)。因此,即使垂直隔离物在视图和主窗口之间吸收了足够的空间,也会显示QTableView上的垂直滚动条。
我希望垂直隔离器占用表小部件上方和下方所需的最小空间,以便集中行,并且表小部件可以显示尽可能多的行,而不需要滚动条。
答案 0 :(得分:0)
您可以继承QTableView,在垂直方向使用QSizePolicy :: Fixed并覆盖sizeHint()以返回您首选的垂直高度。
这是一个有效的例子(你没有指定语言,所以我假设它是Python :-):
import sys
from PySide import QtCore, QtGui
class MyTableView(QtGui.QTableView):
def __init__(self, parent=None):
super().__init__(parent)
#assume expanding in horizontal direction and fixed in vertica direction
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
def sizeHint(self):
return QtCore.QSize(400, 500) #I allow you to edit that!
class MyApplication(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QtGui.QVBoxLayout()
table_view = MyTableView()
layout.addWidget(table_view)
self.model = QtGui.QStringListModel() #use a string list model for simplicity
table_view.setModel(self.model)
self.strings = ['1', '2', '3']
self.model.setStringList(self.strings) #initialize the model
self.counter = 4
button = QtGui.QPushButton('Add Cell') #this button updates the model and adds cells
button.clicked.connect(self.addCell)
layout.addWidget(button)
self.setLayout(layout)
def addCell(self):
self.strings.append(str(self.counter))
self.counter += 1
self.model.setStringList(self.strings)
app = QtGui.QApplication(sys.argv)
main = MyApplication()
main.show()
sys.exit(app.exec_())