1

テーブルを (垂直方向に) 中央に配置するために、上下に QSpacerItems を含む QTableView を含むメイン ウィンドウ (固定サイズ) を作成しようとしています。

(申し訳ありませんが、明らかに画像を投稿できません)。

QVBoxLayout があり、その中に垂直スペーサー、QTableView、および別の垂直スペーサーがあります。3 つのウィジェットすべてで 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 に答える