Как изменить размер виджета OpenGL внутри класса формы Qt

У меня есть виджет OpenGL (myWidget) внутри QVBoxLayout (verticalLayout_2) в классе формы Qt (MyForm).

Я хочу изменить размер виджета OpenGL при изменении размера формы.

Что я должен написать внутри метода changeEvent, чтобы изменить размер QVBoxLayout и виджета OpenGL до нового размера?

MyForm::MyForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyForm)
{
    ui->setupUi(this);
    myWidget = new GL_Widget;
    ui->verticalLayout_2->addWidget( myWidget );
    adjustSize();
}

void MyForm::changeEvent(QEvent *e)
{
    // What should I write here?
}

person Mikael    schedule 21.03.2013    source источник


Ответы (1)


Вам не нужно писать код для автоматического изменения размера вашего дочернего виджета. (Кроме того, changeEvent() в любом случае не является правильным обработчиком событий для этой цели.)

Ваша проблема, вероятно, связана с макетом, который вы создали с помощью Qt Designer. Вероятно, вы перетащили вертикальный макет из боковой панели в виджет формы, который на самом деле не создает макет верхнего уровня. Очень легко сделать эту ошибку.

Вместо этого выполните одно из следующих действий, чтобы создать макеты верхнего уровня в Qt Designer:

  • Щелкните правой кнопкой мыши виджет верхнего уровня (форму) в инспекторе объектов и выберите один из макетов в меню «Макет».

  • Выберите виджет верхнего уровня и щелкните один из значков макета на панели инструментов:

    панель инструментов дизайнера qt

Если вы правильно настроили свой макет (ы), вам не нужно добавлять код. Ваш макет будет обновляться автоматически, если вы просматриваете форму в Qt Designer.

person jmk    schedule 21.03.2013
comment
Спасибо, @jmk, я решил проблему, выбрав «Раскладка» -> «Раскладка в сетке» после щелчка правой кнопкой мыши в форме из Qt Designer. Теперь размер формы автоматически изменяется без использования метода changeEvent. - person Mikael; 25.03.2013