【问题标题】:how to create static QLabel in Qt如何在 Qt 中创建静态 QLabel
【发布时间】:2018-03-15 11:18:24
【问题描述】:

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

我在网上找到了一些答案,例如,如果您想访问一个类变量而不在另一个类中创建其对象,则必须将其数据设为 static

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

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

【问题讨论】:

  • 为什么不直接使用signal/slot 来改变另一个对象的对象?

标签: c++ qt static qlabel


【解决方案1】:

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

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 实例,这是有道理的。否则,静态指针将永远指向首先创建的小部件的标签(危险的是,当该实例被销毁时,它什么也没有)。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2019-02-16
    • 2013-02-26
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多