在我正在编写的代码中,我需要Q_PROPERTY通过一个集成从私有成员公开QWidget。像这样的东西会很好:
class MyWidget: public QWidget{
Q_OBJECT
Q_PROPERTY(QString headerText MEMBER myLabel.text NOTIFY QLabel::notify)
private:
QLabel myLabel
}
Run Code Online (Sandbox Code Playgroud)
是否可以这样做以及如何这样做?或者我是否必须手动编写所有获取/设置方法?
你必须编写自己的 getter/setter:
QString getText()const{ return myLabel.text();}
void setText( const QString& s){ myLabel.setText(s);}
Run Code Online (Sandbox Code Playgroud)
在您可以为其定义 Q_PROPERTY 之后:
Q_PROPERTY( QString headerText READ getText WRITE setText)
Run Code Online (Sandbox Code Playgroud)
注意:对于某些版本的 Qt,您可能会发现一些技巧有效,但它们可能在以下版本中停止工作。因此,最好坚持常见/标准行为。
编辑:
为了给这个答案添加一点形式主义,这里有一个相关的错误:
https://bugreports.qt.io/browse/QTBUG-47695?jql=text%20~%20%22Q_PROPERTY%20member%22
总结:在 Qt<=5.4 中,可以在 Q_PROPERTY MEMBER 参数中使用结构成员。此功能“偶然起作用”,从现在起不再支持。