布局有两个tableviews问题

时间:2010-11-21 22:55:19

标签: qt layout

我有一个小部件包含两个水平布局的QTableViews。我希望他们调整大小到他们喜欢的大小(这样他们就不必显示自动滚动)。我也不希望他们增长超过他们的首选尺寸,如果有任何左边,请留空权利。它应该是这样的:

alt text

我试图通过右侧的间隔来实现它,但由于自动滚动,视图不会增长。

你能提出任何解决方案吗?

2 个答案:

答案 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();
}