2012-09-25 11 views
5

Jestem pewien, że wszyscy z was było w tym momencie - definiowanie Q_OBJECT niosący mnóstwo Q_PROPERTIES, wszystkie z dość trywialne akcesorów:QT Właściwości - cukier lub syntaktyczna Development Tools

class ORM_Customer : public QDjangoModel 
{ 
    Q_OBJECT 

    Q_PROPERTY(QString firstname READ firstname WRITE setFirstname) 
    Q_PROPERTY(QString lastname READ lastname WRITE setLastname) 
    Q_PROPERTY(QString phone  READ phone  WRITE setPhone) 

    Q_PROPERTY(QString address1 READ address1 WRITE setAddress1) 
    Q_PROPERTY(QString address2 READ address2 WRITE setAddress2) 
    Q_PROPERTY(QString houseno READ houseno WRITE setHouseno) 
    Q_PROPERTY(QString postcode READ postcode WRITE setPostcode) 
[... snip ...] 
} 

z toną dostępowych wszystko patrzy tak:

QString ORM_Customer::firstname() const { return m_firstname; } 
QString ORM_Customer::lastname() const { return m_lastname; } 

void ORM_Customer::setFirstname(QString &n) { m_firstname = n; } 
void ORM_Customer::setLastname(QString &n) { m_lastname = n; } 

Zważywszy, że QDjangoModel używa meta obiekt introspekcji, nie mogę polegać na właściwości dynamicznych tutaj (poza tym, lubię właściwości statyczne) - pytanie brzmi, czy są jakieś narzędzia, które pozwoliłoby zaoszczędzić mi instrukcję praca?

Kreator Qt wydaje się nie mieć opcji do zadeklarowania i zdefiniowania niektórych domyślnych akcesorów i ich odpowiednich zmiennych prywatnych. Coś jeszcze? Na pewno musiało to przeszkadzać większej liczbie programistów, niż tylko mnie.

A może jest tylko inny wzorzec rozwoju, którego używają inni?

+0

Tak, zawsze mi to przeszkadzało. Q_PROPERTY zawsze był dla mnie jak cukier. Zawsze możesz mieć członka QVariantMap z ogólnymi funkcjami get/set. Lub, jeśli wolisz, niestandardowe 'wyliczenie' z członkiem' QHash '. – Phlucious

+0

Jedyny przypadek, w którym rozważałbym Q_PROPERTY podczas tworzenia wtyczki dla Projektanta. – Phlucious

Odpowiedz

3

Nie znam żadnego narzędzia, przepraszam. Ale może będziesz zadowolony z Qt 5.1, kiedy będzie gotowy, ponieważ rozszerza kompilator "moc". Patrz sekcja „niezbędne moduły -> moc” w Qt 5.1 feature list:

nowego słowa kluczowego w Q_PROPERTY: członek pozwalają powiązać obiekt do członka klasy bez konieczności mieć getter lub setter.