如何在 Qt 中创建静态 QLabel

how to create static QLabel in Qt

是否可以在一个 class 中创建一些 static QLabels,而其他 classes 可以访问它的 QLabels 变量并应用在不创建对象的情况下更改 QLabels?

我在网上找到了一些答案,比如如果你想访问一个 class 变量而不在另一个 class 中创建它的对象,你必须使其数据 static.

所以基本上我在这里尝试做的是访问和更改一个 class 变量,对我来说它是 QLabels,在另一个 class 中而不创建它的对象。

我知道如何创建 static 变量,但是当要声明一个 staic QLabel 时,我发现很难实现。

我认为您可以将标签设为 可访问 ,即将其公开为 public 成员。假设您在 ui 中有一个 Form class 和一个 label QLabel。将此方法添加到 class:

public:
    QLabel * label();

实施只是:

QLabel *Form::label()
{
    return ui->label;
}

如果您只需要暴露标签文本属性,只需添加这两个访问器方法:

public:
    QString labelText();
    void setLabelText(QString & text);

在实现文件中:

QString Form::labelText()
{
    return ui->label->text();
}

void Form::setLabelText(QString &text)
{
    ui->label->setText(text);
}

最后这些策略更适合封装。

关于静态化:如果您有多个 Form class 实例怎么办?静态成员应该指向哪个标签?如果您 100% 确定您将只有一个小部件实例,则可以添加一个静态 public QLabel * 成员:

public:
    static QLabel * label;

在实现文件中,在顶部:

QLabel *Form::label = 0;

Form构造函数中:

ui->setupUi(this);
if(label == 0)
{
    label = ui->label;
}

同样,如果您只有一个 Form 实例,这就有意义了。否则,静态指针将永远指向首先创建的小部件的标签(而且,危险的是,当该实例被销毁时,指向任何东西)。