从私有成员公开q_property

问题描述 投票:2回答:1

在我正在处理的代码中,我需要通过一个集成QWidget从私有成员公开Q_PROPERTIES。这会很好:

class MyWidget: public QWidget{
   Q_OBJECT
   Q_PROPERTY(QString headerText MEMBER myLabel.text NOTIFY QLabel::notify)

private:
   QLabel myLabel
}

是否有可能这样做以及如何做?或者我是否必须手动编写所有get / set方法?

c++ qt qproperty
1个回答
2
投票

你必须编写自己的getter / setter:

QString getText()const{ return myLabel.text();}
void setText( const QString& s){ myLabel.setText(s);}

然后你可以为它定义一个Q_PROPERTY:

Q_PROPERTY( QString headerText READ getText WRITE setText)

注意:对于某些版本的Qt,您可能会发现一些技巧,但它们可能会停止在以下版本中工作。因此,坚持共同/标准行为可能更好。

编辑:

为了给这个答案添加一些形式主义,这是一个相关的错误:

https://bugreports.qt.io/browse/QTBUG-47695?jql=text%20~%20%22Q_PROPERTY%20member%22

总结:在Qt <= 5.4中,可以在Q_PROPERTY MEMBER参数中使用结构成员。此功能“偶然工作”,从现在开始不受支持。

© www.soinside.com 2019 - 2024. All rights reserved.