2013-03-19 25 views
1

我想創建一個主窗口(固定大小),其中包含一個QTableView與QSpacerItems上面和下面,爲了集中表(垂直)。集中QTableView與垂直間隔的窗口

(對不起,顯然不能發佈圖片)。

我有一個QVBoxLayout,我有一個垂直間隔,QTableView和另一個垂直間隔。我已經玩過所有三個小部件的QSizePolicy的所有組合,但我無法讓表格在沒有滾動條的情況下顯示。 (我不能使用Qt.ScrollBarAlwaysOff,因爲如果項目數量超過主窗口的大小,它們將會被需要)。因此,即使垂直間隔器在視圖和主窗口之間吸收了大量空間,也會顯示QTableView上的垂直滾動條。

我希望垂直間隔符佔用表格小部件上下所需的最小空間,以便集中行,以及表小部件儘可能多地顯示行,而不用滾動條。

回答

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_())