Неправильный размер в виджете Qt + проблема обновления виджета - PullRequest
0 голосов
/ 19 января 2012

Вот сокращенная версия проблемы, которую я имею, используя QT / linux.Программа запускается, но размер отображаемого виджета неправильный (содержимое, рамка + метки, не помещается).

Я понял, что размер окна должен быть вычислен из его содержимого (дочерних элементов).Почему это не происходит должным образом?

Итак, первый вопрос, конечно, почему это происходит.

Реальная программа фактически обновляет содержимое виджета во время выполнения.Я попытался смоделировать это поведение, вставив main_window->show() (прокомментировал //SHOW1).Если этот первый show() вызов сделан, то второй show() не показывает новое содержимое виджета.Я пытался с обновлением без успеха ...

 #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->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
 //    node_tab_widget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    node_tab_widget->setObjectName(QString::fromUtf8("tab_widget"));
    node_tab_widget->resize(500, 400);

     QWidget* w= new QWidget(node_tab_widget);
     node_tab_widget->addTab(w, "TAB");

     //main_window->show();  //SHOW1
     QGroupBox* group_widget = new QGroupBox("GROUPNAME", w);
     QVBoxLayout*  group_layout = new QVBoxLayout;
     group_widget->setLayout(group_layout);
     group_layout->addWidget((QLabel*)new QLabel(">>>>>>>>>>>>>>>>>>>>>>>>>here1"));
     group_layout->addWidget((QLabel*)new QLabel("here2"));
 //     group_widget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);


     main_window->update();
     main_window->show();
     return app.exec();
 }

1 Ответ

0 голосов
/ 20 января 2012

Я не очень понимаю, какой результат вы ожидаете, может быть что-то вроде того, что вы получаете из этого кода:

#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();
 node_tab_widget->setObjectName(QString::fromUtf8("tab_widget"));
 node_tab_widget->resize(500, 400);

 QWidget* w= new QWidget();
 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"));
 group_layout->addWidget((QLabel*)new QLabel("here2"));

 QVBoxLayout*  gl = new QVBoxLayout;
 gl->addWidget(group_widget);

 main_window->setCentralWidget(node_tab_widget);
 main_window->show();
 return app.exec();
}

, который добавляет QTabWidget node_tab_widget в качестве центрального виджета с вкладкой TAB.

Вкладка содержит QGroupBox GROUPNAME с двумя метками (выровненными по вертикали)

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