2013-03-19 11 views
1

Я пытаюсь создать главное окно (фиксированный размер), которое содержит QTableView, с QSpacerItems выше и ниже, чтобы централизовать таблицу (по вертикали).Централизовать QTableView в окне с вертикальными прокладками

(Извините, не удалось опубликовать изображения, видимо).

У меня есть QVBoxLayout, в котором у меня есть вертикальная проставка, QTableView и другая вертикальная проставка. Я играл со всеми комбинациями QSizePolicy для всех трех виджетов, но я не могу заставить таблицу отображаться без полос прокрутки. (Я не могу использовать Qt.ScrollBarAlwaysOff, потому что они понадобятся, если количество элементов превышает размер главного окна). Таким образом, отображаются вертикальные полосы прокрутки на QTableView, хотя вертикальные распорки поглощают много места между видом и основным окном.

Я хочу, чтобы вертикальные проставки занимали минимальное пространство, необходимое над и под виджетами таблицы, чтобы централизовать строки и виджет таблицы, чтобы отображать как можно больше строк, без полос прокрутки.

ответ

0

Вы можете подклассифицировать QTableView, использовать QSizePolicy :: Исправлено в вертикальном направлении и переопределить 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_())