2017-02-20 1 views
1

In dem Code, ich arbeite an ich muss Q_PROPERTIES von privaten Mitglied (en) durch eine integrierende QWidget offen legen. Etwas das wäre nett:Aussetzen von q_property von privaten Mitglied

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

private: 
    QLabel myLabel 
} 

Ist es möglich, so und wie? Oder muss ich alle Get/Set-Methoden manuell schreiben?

+0

Momentan ist es nur möglich, Moc zu modifizieren. Beachten Sie jedoch, dass 'QLabel' kein Notifier-Signal hat. –

Antwort

1

Sie haben Ihren eigenen Getter/Setter schreiben:

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

Und nachdem Sie eine Q_PROPERTY für ihn definieren kann:

Q_PROPERTY(QString headerText READ getText WRITE setText) 

Hinweis: Bei einigen Versionen von Qt, können Sie einige gefunden Tricks arbeiten, aber sie können aufhören, in einer folgenden Version zu arbeiten. Aus diesem Grund ist es wahrscheinlich besser, sich an das übliche/Standardverhalten zu halten.

EDITED:

Um ein wenig Formalismus zu dieser Antwort hinzufügen, hier ist ein verwandter Fehler:

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

Summieren: In Qt < = 5.4 war es möglich, Strukturelemente zu verwenden, in der Parameter Q_PROPERTY MEMBER. Diese Funktion "Arbeitete zufällig" und wird bisher nicht unterstützt.

+0

Ich hoffte, dass es einen Standardweg gibt, ohne alle Getter und Setter neu implementieren zu müssen. –

+0

Es gibt Raum für Verbesserungen, ich stimme zu: zum Beispiel vermisse ich auch Q_PROPERTY von benutzerdefinierten Typ (struct/class) und Q_PROPERTY Zugriff auf Mitglieder einer Struktur/Klasse. –

+0

@AdrianMaire Sie können 'Q_PROPERTY' mit benutzerdefinierten Typen verwenden. _ "Benutzerdefinierte Typen, die von Eigenschaften verwendet werden, müssen mit dem Makro Q_DECLARE_METATYPE() registriert werden, damit ihre Werte in QVariant-Objekten gespeichert werden können. Sie eignen sich daher für statische Eigenschaften, die mit dem Makro Q_PROPERTY() in Klassendefinitionen und dynamisch deklariert werden Eigenschaften, die zur Laufzeit erstellt werden. "_ –

Verwandte Themen