QLabel does not display in QWidget

后端 未结 2 1981
醉酒成梦
醉酒成梦 2020-11-22 05:44

I have the following hierarchy in my Qt Application: QMainWindow > QWidget (centralWidget) > QWidget (subclassed) > QLabel

Initialization code in my QMainWindow code

相关标签:
2条回答
  • 2020-11-22 06:00

    We need to show the label created by button click, cause centralwidget was already painted. Here is a working example, I added this as answer also I noticed better adding chatWidget as child to centralWidget where in your original code its added to the UI .. this is your choice.

    Mainwindow:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        //
        ui->setupUi(this);
        centralWidget = new QWidget();
        centralWidget->setGeometry(width,height);
        chatWidget=new ChatWidget(centralWidget); // the subclassed QWidget
        setCentralWidget(centralWidget);
    
        // added testing
        QPushButton *btn = new QPushButton("MyButton",centralWidget);
        btn->setGeometry(100,100,100,100);
        btn->setMaximumSize(100,100);
        connect(btn,&QPushButton::clicked, chatWidget, &ChatWidget::displayChatAfterButtonPressed);
     }
    

    and chatWidget:

    ChatWidget::ChatWidget(QWidget *parent):QWidget(parent)
    {
        QLabel  *lbl;
        lbl=new QLabel(this);
        lbl->setText("Hello World 1");
    }
    
    void ChatWidget::displayChatAfterButtonPressed()
    {
        QLabel *lbl;
        lbl=new QLabel(this);
        lbl->setText("Hello World 2");
        lbl->show();
    }
    
    0 讨论(0)
  • 2020-11-22 06:24

    Widgets when they are visible for the first time call to be visible to their children, but since you are creating it afterwards they probably are not calling that method, a possible solution is to call the show method.

    void ChatWidget::displayChatAfterButtonPressed()
    {
        QLabel *lbl;
        lbl=new QLabel(this);
        lbl->setText("Hello World 2");
        lbl->show();
    }
    

    comment: it seems strange to me that the QMainWindow you set a central widget and then create the chatWidget as a parent to the QMainWindow, it is generally not recommended to add children to the QMainWindow because it has a given structure, what should be done is to place it inside the centralwidget.

    0 讨论(0)
提交回复
热议问题