我有一个小部件包含两个水平布局的QTableViews。我希望他们调整大小到他们喜欢的大小(这样他们就不必显示自动滚动)。我也不希望他们增长超过他们的首选尺寸,如果有任何左边,请留空权利。它应该是这样的:
我试图通过右侧的间隔来实现它,但由于自动滚动,视图不会增长。
你能提出任何解决方案吗?
答案 0 :(得分:1)
您可以重新实现父级窗口小部件resizeEvent
功能,而不是使用布局。因此,当调整父窗口小部件的大小时,您可以手动设置表格的大小。
您可以尝试的另一种方法是重新实现QTableView的sizeHint
或/和minimumSizeHint
功能,以便它们返回适合您大小的商品。
另请参阅QSizePolicy - 它可能很有用
答案 1 :(得分:1)
如果我理解了你的问题,你想要两个QTableViews如果有足够的空间(但不超过他们的PreferredSize)就调整到他们的PreferredSize,如果没有足够的空间则缩小。如果空间太大,应该留空。这是一个例子:
#include <QtGui>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QMainWindow w;
QHBoxLayout *hbox = new QHBoxLayout;
QWidget *centralw = new QWidget;
centralw->setLayout(hbox);
w.setCentralWidget(centralw);
QTableView *t1 = new QTableView;
QTableView *t2 = new QTableView;
// Version one: the preferred size is the maximum size
// t1->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred));
// t2->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred));
// Version two: the preferred size is the only accepted size
// if you want the widgets not to change their size, change the two previous lines with
// t1->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
// t2->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
// hbox->addWidget(t1);
// hbox->addWidget(t2);
// add a stretch that will fill empty space
// hbox->addStretch(1);
// Version three: tables have a minimum and maximum width. They can be shrunk
// but they try to expand to take the maximum available space up to their maximum
// width.
t1->setMinimumWidth(150);
t1->setMaximumWidth(400);
t2->setMinimumWidth(100);
t2->setMaximumWidth(200);
t1->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
t2->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
hbox->addWidget(t1);
hbox->addWidget(t2);
hbox->setStretchFactor(t1, 1);
hbox->setStretchFactor(t2, 1); // tableviews have the same stretch factor
hbox->addStretch(0); // lowest stretch factor
w.show();
return app.exec();
}