У меня проблема с вычислением размера в Qt при добавлении новых виджетов во время выполнения.Я попытался проиллюстрировать проблему с сокращенной программой там.Надеемся, что это показывает ту же проблему, что и моя другая (более сложная) программа:
Когда виджет был показан, используя:
w->show();
... и некоторые новые виджеты добавляются впозже (возможно, w
имеет макет), что я должен сделать, чтобы заново отобразить w
и его родителей, чтобы учесть размер вновь добавленных дочерних виджетов?Мне нужно поведение, которое заключается в том, что пересчет размера распространяется вверх до ближайшего прокручиваемого объекта (или главного окна, если прокручиваемых объектов нет)
В приведенном ниже примере я создаю небольшую структуру виджетов: если вызовshow()
(прокомментированный SHOW1) удаляется, затем вся структура виджета определяется перед первым вызовом show()
, и все работает.НО: если я звоню show()
(на SHOW1), то в последнем шоу не отображаются правильные вещи: кадр все еще слишком мал
#include <QApplication>
#include <QtCore>
#include <QMainWindow>
#include <QTabWidget>
#include <QWidget>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QLabel>
#include <stdlib.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow* main_window = new(QMainWindow);
main_window->setObjectName("main_window");
main_window->resize(800, 600);
main_window->setWindowTitle("Hello");
QTabWidget* node_tab_widget = new QTabWidget(main_window);
node_tab_widget->setObjectName(QString::fromUtf8("tab_widget"));
QWidget* w= new QWidget(node_tab_widget);
node_tab_widget->addTab(w, "TAB");
QGroupBox* group_widget = new QGroupBox("GROUPNAME", w);
QVBoxLayout* group_layout = new QVBoxLayout;
group_widget->setLayout(group_layout);
group_layout->addWidget((QLabel*)new QLabel(">>>>>>>>>>>>>>>>>>>>>>>>>here1"));
main_window->show(); // SHOW1: If this one is commented, then OK!
group_layout->addWidget((QLabel*)new QLabel("here2"));
group_layout->addWidget((QLabel*)new QLabel("here2"));
group_layout->addWidget((QLabel*)new QLabel("here2"));
group_layout->addWidget((QLabel*)new QLabel("here2"));
main_window->setCentralWidget(node_tab_widget);
// main_window->update();
// main_window->hide();
main_window->show(); // How to I get that to recaclulate the size of its contents?
return app.exec();
}