QLabel不会显示在QWidget中

时间:2018-02-04 19:28:59

标签: qt qwidget qlabel

我的Qt应用程序中有以下层次结构: QMainWindow> QWidget(centralWidget)> QWidget(子类)> QLabel

我的QMainWindow代码中的初始化代码:

centralWidget = new QWidget();
centralWidget->setGeometry(0,0,width,height);
chatWidget=new ChatWidget(this); // the subclassed QWidget
setCentralWidget(centralWidget);

在我的子类QWidget初始化(与Qt App初始化同时发生)中,我有以下代码:

ChatWidget::ChatWidget(QWidget *parent):QWidget(parent)
{
    QLabel  *lbl;
    lbl=new QLabel(this);
    lbl->setText("Hello World 1"); <-- Is properly Display
}

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

当从类初始化添加QLabel时,消息很好地显示在小部件中。

然而,当我按下一个按钮后(通过同一个QWidget子类中的函数)启动相同的代码时,文本不会出现在屏幕上。

我不想使用布局,因为我需要准确定位标签。

试图重新粉饰,但两者都没有帮助。

初始化完成后,如何正确动态地显示标签?

2 个答案:

答案 0 :(得分:2)

小部件在第一次看到他们的孩子可见时可见,但由于你之后创建它们可能没有调用该方法,可能的解决方案是调用show方法。

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

评论:我觉得奇怪的是QMainWindow你设置了一个中心小部件,然后创建了chatWidget作为QMainWindow的父级,一般不建议将子项添加到QMainWindow,因为它有一个给定的结构,应该做的是将它放在centralwidget内。

答案 1 :(得分:1)

我们需要显示按钮点击创建的标签,因为centralwidget已经被绘制。 这是一个工作示例,我添加了这个作为答案,我注意到更好地将$cat->joinWith(['products']) ->andWhere($prod->where) ->createCommand() ->rawSql; 作为孩子添加到SELECT `category`.* FROM `category` LEFT JOIN `products` ON `products`.`cat_id` = `category`.`id` WHERE (`category`.`status` = 1) AND (`products`.`status` = 1) ,在原始代码中将其添加到UI中......这是您的选择。

主窗口:

chatWidget

和chatWidget:

centralWidget