Макет с двумя таблицами - PullRequest
1 голос
/ 22 ноября 2010

У меня есть виджет, содержащий два QTableViews в горизонтальной компоновке.Я хотел бы, чтобы они изменили размер до своего предпочтительного размера (чтобы им не приходилось показывать автопрокрутки).Я также не хочу, чтобы они росли больше, чем их предпочитаемый размер, и оставляли пустое пространство справа, если осталось.Это должно выглядеть так:

alt text

Я пытался добиться этого с помощью спейсера справа, но из-за автопрокрутки представления не растут.

Можете ли вы предложить какое-либо решение?

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Если я понял ваш вопрос, вы хотите, чтобы два QTableView изменили размер до своего 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();
}
1 голос
/ 22 ноября 2010

Вы можете переопределить родительский виджет resizeEvent и вообще не использовать макет. Поэтому при изменении размера родительского виджета вы можете вручную установить размеры таблиц.

Другой способ, которым вы можете попробовать, - переопределить sizeHint или / и minimumSizeHint функции QTableView, чтобы они возвращали подходящий для вас размер.

Также взгляните на QSizePolicy - это может быть полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...