91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Qt入門篇]5 Qt的屬性系統——聲明屬性

發布時間:2020-07-30 18:57:46 來源:網絡 閱讀:1892 作者:taohe_0 欄目:開發技術

[Qt入門篇]5 Qt的屬性系統——聲明屬性

 

Qt提供了靈活的屬性系統,它基于Qt的元對象系統,不依賴于編譯器,這保證了Qt獨立于編譯其和平臺的特點。這篇文章主要看看如何聲明屬性。

屬性系統比較復雜,先看一個簡單的例子。在QWidget中,有很多屬性的聲明,找一個簡單學習:

Q_PROPERTY(bool modal READ isModal)

這里出現了5個元素:Q_PROPERTYboolmodal、READ、isModal。這五個元素都是啥作用呢?

Q_PROPERTY:用于聲明屬性的宏;

bool:屬性類型;

modal:屬性名稱;

READ isModal:這兩個元素是一組,放在一起表示讀取該屬性的接口為isModal。

這個宏聲明完成聲明屬性的工作么?從聲明本身來說算是完成了,但是從實現角度看還沒有,我們還得將這個屬性用到的成員函數實現了。

再看QWidget的代碼,有isModal聲明也有相關的實現:

聲明在qwidget.h中:

public:

bool isModal() const;

實現在qwidget.cpp中:

inline bool QWidget::isModal() const

{return data->window_modality!=Qt::NonModal;}

至此,這個屬性才算完整。整理一下,Qt只讀屬性聲明的一般形式為:

Q_PROPERTY(type nameREAD getFunction)

其中:

type:必須是C++默認的類型或者自定義類型;

name:是用于自定義;

READ getFunction:getFunction在該類中必須有相應聲明和實現,它的返回值必須是type類型或者是type的引用,而且不帶參數。

還是寫一個代碼,更容易理解:一個簡單的類CObj繼承QObject,它有一個成員函數isInTest()用于獲取測試標志,我們聲明一個testflag的屬性,代碼如下:

聲明:

#ifndef COBJ_H

#define COBJ_H

#include<QObject>

class CObj public QObject

{

   Q_OBJECT

   Q_PROPERTY(bool testFlag READ isInTest)

public:

   explicit CObj(QObject*parent=0);

signals:

publicslots:

public:

   bool isInTest(voidconst;

};

 

#endif//COBJ_H

實現:

#include "cobj.h"

CObj::CObj(QObject *parent) : QObject(parent)

{

 

}

 

bool CObj::isInTest(void) const

{

   return (true);

}

通過上面的代碼的,我們為CObj聲明了一個testFlag的屬性,testFlag是bool型,testFlag的讀函數為isInTest。可以這么說,屬性系統是在實現了類的功能之后加進去的,先寫好成員函數,然后在加屬性,應該是這么一個順序。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙海市| 团风县| 松江区| 鹿泉市| 平遥县| 舞钢市| 刚察县| 万盛区| 福建省| 开化县| 佛教| 师宗县| 义乌市| 五河县| 冕宁县| 无为县| 出国| 济南市| 苗栗市| 临澧县| 宜兰县| 湘潭县| 鹿泉市| 益阳市| 石门县| 贵州省| 眉山市| 阜新| 冀州市| 吴川市| 平顶山市| 伊宁县| 买车| 佛坪县| 牟定县| 陇南市| 甘德县| 六盘水市| 监利县| 玉山县| 资讯|