Как изменить размер содержимого QMainWindow в соответствии с размером окна

У меня есть QMainWIndow с несколькими виджетами, одним из которых является QTableView.

Размер главного окна можно изменять.

Как изменить размер содержимого окна автоматически, шрифт и все остальное, то есть при изменении размера окна его содержимое также должно автоматически изменяться?

Буду признателен за помощь, спасибо.


person user1173240    schedule 21.01.2013    source источник
comment
Вы разместили свои виджеты в макете?   -  person hank    schedule 21.01.2013
comment
изменение размера шрифтов необходимо выполнять вручную. Но это очень сложно, так как изменение размера шрифта может привести к изменению размера вашего виджета и вашего главного окна.   -  person UmNyobe    schedule 21.01.2013
comment
@Hank - у меня есть вертикальное поле внутри окна. В этом окне у меня есть 3 виджета, 1 использует макет сетки и имеет QLablels, другой - TableView с использованием TableLayout. Если размер таблицы изменен, содержимое в ней также должно быть изменено... Пожалуйста, сообщите.   -  person user1173240    schedule 21.01.2013
comment
Я не думаю, что вы можете сделать это со стандартной механикой Qt, поскольку то, что вы описываете, отличается от того, что считается поведением по умолчанию (изменение размера любого приложения - размер шрифта обычно остается прежним). Вероятно, вы могли бы переопределить QWidget::render() или аналогичный и используйте scale в предоставленном QPainter. Я не уверен, что это каскадируется через подвиджеты, и даже если это так, границы и т. д. также будут масштабироваться.   -  person Tim Meyer    schedule 21.01.2013
comment
@TimMeyer Понятно. Было бы довольно сложно отслеживать свойства каждого подвиджета. Я попробую ваше предложение. Спасибо за вашу помощь.   -  person user1173240    schedule 22.01.2013


Ответы (1)


вы должны поместить все свои виджеты в макет, макет (ы) автоматически изменяет размер всех ваших виджетов внутри QMainWindow, когда пользователь вносит какие-либо изменения в размер QMainWindow, вы можете добавить макет как через Qt Creator IDE, так и через кодирование.

ОБНОВИТЬ:

если вы добавляете макеты в Qt Creator, макеты автоматически кодируются в файле moc, и пользователю не нужно вносить какие-либо изменения в их поведение посредством кодирования.

но через кодирование в конструкторе класса:

QVBoxLayout *layout = new QVBoxLayout(parent);

layout->addWidget(widget1);   
layout->addWidget(widget2);   
layout->addWidget(widget3);   

this->setLayout(layout);  

но если вы хотите изменить шрифт QLabel, это делается с помощью resizeEvent в QMainWindow, поэтому для любого изменения размера MainWindow срабатывает resizeEvent, поэтому вы используете этот код:

в mainwindow.h вы объявляете resizeEvent:

protected:
    void resizeEvent(QResizeEvent* event);

в mainwindow.cpp реализовать resizeEvent:

void MainWindow::resizeEvent(QResizeEvent *event)
{
    MainWindow::resizeEvent(event);
    if(this)
    {
        // QLabel process
    }
}
person Reza Ebrahimi    schedule 23.01.2013
comment
У меня есть вертикальная коробка с 3 виджетами внутри. Должен ли я добавить макет в главное окно? и если да, то какой макет выбрать? Я не хочу влиять на то, как это выглядит сейчас. - person user1173240; 25.01.2013
comment
Я это сделал. Не помогло. Размер шрифта или содержимого не менялся. - person user1173240; 28.01.2013
comment
это очень просто, я не могу понять, что ты хочешь сделать? вы хотите изменить размер шрифта? и содержимое вашего виджета? что значит содержимое? какой виджет вы используете? для изменения размера шрифта вы должны сделать это с помощью шрифта QFont (Arial); шрифт.setBold (истина); this-›setFont(шрифт); this-›setAlignment(Qt::AlignCenter); - person Reza Ebrahimi; 28.01.2013
comment
У меня есть MainWindow с 3 виджетами. Эти виджеты находятся в QVerticalBox. Один из этих виджетов представляет собой смесь QLabels в QGridLayout, а другой — QTableView. Что я хочу знать, так это способ, который позволил бы изменять размер шрифта (скажем) автоматически, когда я изменяю размер главного окна. На данный момент этого не происходит. Содержимое окна остается того же размера, когда я расширяю или уменьшаю размер главного окна. - person user1173240; 28.01.2013