Qt小部件+小部件更新问题中的大小错误

时间:2012-01-19 19:45:48

标签: linux qt widget size show

这是我使用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 :(得分:0)

我真的不明白你期望的结果是什么,可能就像你从这段代码中得到的结果:

#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