您不应该将类的名称与小部件的名称一起使用,因此首先要做的是更改其名称:
第一种选择:
另一方面
QLabel
这里面
DemoPromotedWidget
并不意味着
DemoPromotedWidget
可以访问
QLabel公司
在构造函数中更少,因为在该方法中,它还没有添加到主窗口中,一个可能的解决方案是创建一个属性,您可以在其中为它指定
QLabel公司
:
demopromotedwidget。H
#ifndef DEMOPROMOTEDWIDGET_H
#define DEMOPROMOTEDWIDGET_H
#include <QLabel>
#include <QWidget>
class DemoPromotedWidget : public QWidget
{
Q_OBJECT
public:
explicit DemoPromotedWidget(QWidget *parent = nullptr);
QLabel *getLabel() const;
void setLabel(QLabel *value);
private:
QLabel *label;
};
#endif // DEMOPROMOTEDWIDGET_H
demopromotedwidget。cpp
#include "demopromotedwidget.h"
DemoPromotedWidget::DemoPromotedWidget(QWidget *parent) : QWidget(parent)
{
}
QLabel *DemoPromotedWidget::getLabel() const
{
return label;
}
void DemoPromotedWidget::setLabel(QLabel *value)
{
label = value;
if(label)
label->setText("some text");
}
主窗口。cpp
...
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->setLabel(ui->DemoLabel);
}
...
第二种选择:
另一种简单得多的方法,但只有在使用Qt设计器添加小部件(QLabel)时才能实现,就像本例中使用的方法一样
showEvent()
和
findChild()
:
demopromotedwidget。H
#ifndef DEMOPROMOTEDWIDGET_H
#define DEMOPROMOTEDWIDGET_H
#include <QLabel>
#include <QWidget>
class DemoPromotedWidget : public QWidget
{
Q_OBJECT
public:
explicit DemoPromotedWidget(QWidget *parent = nullptr);
private:
QLabel *label;
protected:
void showEvent(QShowEvent *event);
};
#endif // DEMOPROMOTEDWIDGET_H
demopromotedwidget。cpp
#include "demopromotedwidget.h"
DemoPromotedWidget::DemoPromotedWidget(QWidget *parent) : QWidget(parent)
{
}
void DemoPromotedWidget::showEvent(QShowEvent *event)
{
label = findChild<QLabel *>("DemoLabel");
if(label)
label->setText("some text");
QWidget::showEvent(event);
}
更新:
一种新的方法是创建一个表单,它是一个QWidget,具有
.ui
,
.h
和
.cpp
:
正如我所说,创建一个新类,它与初始代码不同,具有。ui,然后在Qt Designer的帮助下打开它并添加标签
但这也是一门你可以像第一次一样推广的课程。
下面是完整的示例
link