如何在Qt中创建静态QLabel

时间:2018-03-15 11:18:24

标签: c++ qt static qlabel

是否可以在一个类中创建一些static QLabel,其他类可以访问其QLabel变量并将更改应用于QLabel而无需创建它的对象?

我在网上找到了一些答案,就像你想要访问一个类变量而不在另一个类中创建它的对象一样,你必须创建它的数据static

所以基本上我在这里要做的就是访问和更改一个类变量,对我来说它是QLabel s,在另一个类中没有创建它的对象。

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

1 个答案:

答案 0 :(得分:2)

我认为您可以将标签设为,即将其公开为公共会员。假设您有一个Form课程,label QLabel ui。将此方法添加到类:

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类的实例,该怎么办?静态成员应该指向哪个标签?如果您100%确定只有一个小部件实例,则可以添加静态公共QLabel *成员:

public:
    static QLabel * label;

在实施文件中,顶部:

QLabel *Form::label = 0;
Form构造函数中的

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

同样,如果您只有一个Form实例,这是有道理的。否则,静态指针将永远指向首先创建的小部件的标签(并且,当该实例被销毁时危险地,没有任何内容)。