2012-09-25 18 views
5

我相信所有的你在這一點上 - 定義Q_OBJECT攜帶一噸Q_PROPERTIES,都帶有相當瑣碎存取:QT屬性 - 語法糖或開發工具

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 ...] 
} 

一噸的訪問器一切看起來就像是:

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; } 

鑑於QDjangoModel使用元對象自省,我不能依靠動力性能在這裏(此外,我喜歡靜態屬性) - 問題是,是否有可以節省我手動任何工具勞動?

Qt Creator似乎沒有選擇只聲明和定義一些默認訪問器及其相應的私有變量..還有其他什麼?它肯定會困擾更多的開發者,而不僅僅是我自己。

或者也許還有別人使用的另一種開發模式?

+0

是的,這一直困擾着我。 Q_PROPERTY總是以糖的形式出現在我眼前。您可以始終擁有一個帶有通用get/set函數的QVariantMap成員。或者,如果你願意,一個定製的'enum'成員'QHash '。 – Phlucious

+0

當我考慮Q_PROPERTY時,唯一的情況是爲Designer開發一個插件。 – Phlucious

回答

3

我不知道一個工具,對不起。但是,當它準備好時,也許你會對Qt 5.1感到滿意,因爲它擴展了'moc'編譯器。請參見「基本模塊 - >商務部」在Qt 5.1 feature list

在Q_PROPERTY新的關鍵字:成員讓你綁定屬性類成員,而不需要有一個getter或setter方法。