1

我正在尝试创建一个包含 QTableView 的主窗口(固定大小),上面和下面都有 QSpacerItems,以便(垂直)集中表格。

(抱歉,显然无法发布图片)。

我有一个 QVBoxLayout,其中有一个垂直垫片、QTableView 和另一个垂直垫片。我已经为所有三个小部件使用了 QSizePolicy 的所有组合,但我无法在没有滚动条的情况下显示表格。(我不能使用 Qt.ScrollBarAlwaysOff ,因为如果项目数超过主窗口的大小,则需要它们)。因此,QTableView 上的垂直滚动条会显示出来,即使垂直间隔在视图和主窗口之间吸收了大量空间。

我希望垂直垫片占据表格小部件上方和下方所需的最小空间,以便集中行,并且表格小部件可以显示尽可能多的行,而无需滚动条。

4

1 回答 1

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_())
于 2013-06-18T02:55:51.617 回答