在我正在处理的代码中,我需要通过一个集成QWidget从私有成员公开Q_PROPERTIES。这会很好:
class MyWidget: public QWidget{
Q_OBJECT
Q_PROPERTY(QString headerText MEMBER myLabel.text NOTIFY QLabel::notify)
private:
QLabel myLabel
}
是否有可能这样做以及如何做?或者我是否必须手动编写所有get / set方法?
你必须编写自己的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参数中使用结构成员。此功能“偶然工作”,从现在开始不受支持。