動態對象
1.添加Q_PROPERTY對象
#ifndef MYPROPERTYCLASS_H
#define MYPROPERTYCLASS_H#include <QObject>class MyPropertyClass : public QObject
{Q_OBJECTQ_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged)
public:explicit MyPropertyClass(QObject *parent = nullptr);QString mask()const;void setMask(QString strMaskNum);
signals:void maskChanged(QString str);
public slots:private:QString m_mask;
};#endif // MYPROPERTYCLASS_H
2.動態屬性可以用Q_OBJECT來指向Q_PROPERTY,這樣在實際開發中,如果遇到別人寫的對象我們又不想了解他的太多內容,只需要知道對象類名就可以直接進行數據的提取。
MyPropertyClass * mypc = new MyPropertyClass;MyPropertyClass *mypc2 = new MyPropertyClass;connect(mypc,SIGNAL(maskChanged(QString)),this,SLOT(maskChanged(QString)));mypc->setMask("10000億個口罩");qDebug()<<mypc->mask();QObject *obj = mypc;qDebug()<<"obj第一次進行屬性的讀取:"<<obj->property("mask").toString();obj->setProperty("mask","20000個口罩");qDebug()<<"obj第二次進行屬性的讀取:"<<obj->property("mask").toString();qDebug()<<"mypc2讀取數據:"<<mypc2->mask();
注意因為元對象屬性是靜態的,內存中只有一份mypc指向了這個內存,意味著mypc2就不能讀取到20000個口罩這個數據
對象樹
Qt 提供了對象樹機制,能夠自動、有效的組織和管理繼承自 QObject 的 Qt 對象。每個繼承自 QObject 類的對象通過它的對象鏈表(QObjectList)來管理子類對象,當 用 戶 創 建 一 個 子 對 象 時 , 其 對 象 鏈 表 相 應 更 新 子 類 對 象 信 息 , 對 象 鏈 表 可 通過children()獲取。當父對象析構的時候,其對象鏈表中的所有(子)對象也會被析構,父對象會自動將其從父對象列表中刪除。Qt 保證沒有對象會被 delete 兩次。開發中手動回收資源時建議使用deleteLater 代替 delete,因 deleteLater 多次是安全的,而 delete 多次是不安全的。