freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

qt的對象模型與信號槽的概念-文庫吧

2025-02-13 00:22 本頁面


【正文】 )。 QMetaProperty QMetaObject::property(i)。 QMetaProperty::name/isConstant/isDesignable/read/write/... 動態(tài)屬性 ? 在運行時給對象增加屬性 ? 可以用來“標(biāo)識”對象,等等。 bool ret = objectsetProperty(name, value)。 QObject::dynamicPropertyNames() const 真:如果屬性經(jīng)過Q_PROPERTY 定義 假:如果只是動態(tài)增加 返回一個動態(tài)屬性的列表 創(chuàng)建自定義屬性 class AngleObject : public QObject { Q_OBJECT Q_PROPERTY(qreal angle READ angle WRITE setAngle) public: AngleObject(qreal angle, QObject *parent = 0)。 qreal angle() const。 void setAngle(qreal)。 private: qreal m_angle。 }。 宏,描述屬性 初始化值 Getter Setter 私有狀態(tài) 創(chuàng)建自定義屬性 AngleObject::AngleObject(qreal angle, QObject *parent) : QObject(parent), m_angle(angle) { } qreal AngleObject::angle() const { return m_angle。 } void AngleObject::setAngle(qreal angle) { m_angle = angle。 doSomething()。 } 初始化值 Getter 簡單返回值。這里你可以計算復(fù)雜的值。 更新內(nèi)部狀態(tài) , 對變化作出反應(yīng)。 自定義屬性 枚舉 class AngleObject : public QObject { Q_OBJECT Q_ENUMS(AngleMode) Q_PROPERTY(AngleMode angleMode READ ...) public: enum AngleMode {Radians, Degrees}。 ... }。 普通枚舉聲明。 宏通知 Qt AngleMode 是一個枚舉類型。 屬性使用枚舉作為類型。 內(nèi)存管理 ? QObject 可以有父對象和子對象 ? 當(dāng)一個父對象被刪除,它的子對象也同樣被刪除。 QObject *parent = new QObject()。 QObject *child1 = new QObject(parent)。 QObject *child2 = new QObject(parent)。 QObject *child1_1 = new QObject(child1)。 QObject *child1_2 = new QObject(child1)。 delete parent。 parent child1 child2 child1_1 child1_2 parent 刪除 child1 和 child2 child1 刪除 child1_1 和 child1_2 內(nèi)存管理 ? 當(dāng)需要實現(xiàn)視覺層級時使用到它。 QDialog *parent = new QDialog()。 QGroupBox *box = new QGroupBox(parent)。 QPushButton *button = new QPushButton(parent)。 QRadioButton *option1 = new QRadioButton(box)。 QRadioButton *option2 = new QRadioButton(box)。 delete parent。 parent 刪除 box 和 button box 刪除 option1 和 option2 使用模式 ? 使用 this指針指向最高層父對象 ? 在棧上分配父對象空間 void Widget::showDialog() { Dialog dialog。 if (() == QDialog::Accepted) { ... } } Dialog::Dialog(QWidget *parent) : QDialog(parent) { QGroupBox *box = QGroupBox(this)。 QPushButton *button = QPushButton(this)。 QRadioButton *option1 = QRadioButton(box)。 QRadioButton *option2 = QRadioButton(box)。 ... dialog 在作用范圍結(jié)束時被刪除 堆( Heap) ? 當(dāng)使用 new 和 delete時 , 內(nèi)存在堆中分配。 ? 堆內(nèi)存空間必須通過 delete 完全釋放,以防止內(nèi)存泄漏。 ? 只要有需要,分配在堆上的對象可以一直存活下去。 new delete 構(gòu)造 Construction 析構(gòu) Destruction 棧( Stack) ? 局部變量在棧上分配。 ? 棧變量超過作用范圍時會自動釋放。 ? 分配在棧中的對象在超出作用范圍時總是會被析構(gòu)。 int a } 構(gòu)造 Construction 析構(gòu) Destruction 堆 和 棧 ? 想要自動內(nèi)存管理,只有父對象需要在棧上分配。 MyMainWindow QApplication int main(int argc, char **argv) { QApplication a(argc, argv)。 MyMainWindow w。 ()。 return ()。 } MyMainWindow::MyMainWindow(... { new QLabel(this)。 new ... } 改變所有者 ? QObject可以修改它所屬的父對象。 ? 父對象知道何時子對象被刪除 ? 一系列函數(shù)實現(xiàn)返回指針,從其所有者“拿走”釋放的數(shù)據(jù),把它留給拿取者處理 objsetParent(newParent)。 delete listWidgetitem(0)。 // 刪除第一個 item(不安全 ) QLayoutItem *QLayout::takeAt(int)。 QListWidgetItem *QListWidget::takeItem(int)。 // Safe alternative QListWidgetItem *item = listWidgettakeItem(0)。 if (item) { delete item。 } item列表本質(zhì)上并不是子對象,而是擁有者。 這個例子進行了說明。 構(gòu)造規(guī)范 ? 幾乎所有的 QObject 都有一個默認為空值的父對象。 ? Qwidget 的父對象是其它 QWidget ? 類為了方便傾向于提供多種構(gòu)造(包括只帶有父對象的一種) ? 父對象通常是帶缺省值的第一個參數(shù)。 QLabel(const QString text, QWidget *parent=0, Qt::WindowFlags f=0)。 QObject(QObject *parent=0)。 QPushButton(QWidget *parent=0)。 QPushButton(const QString text, QWidget *parent=0)。 QPushButton(const QIcon icon, const QString text, QWidget *parent=0)。 構(gòu)造規(guī)范 ? 當(dāng)創(chuàng)建自己的 Qobject時 , 需考慮 ? 總是允許父對象 parent 為 0 (null) ? 有一個只接受父對象的構(gòu)造函數(shù) ? parent 是帶默認值的第一個參數(shù) ? 提供幾種構(gòu)造函數(shù),避免空值、無效值(. QString())作為參數(shù)。 休息 信號( signal)和槽( slot) ? 通過反饋的方式動態(tài)地或松散地將事件和狀態(tài)變化聯(lián)系起來。 ? 是什么使 Qt 運作? 動作中的信號和槽 emit clicked()。 動作中的信號和槽 private slots: void on_addButton_clicked()。 void on_deleteButton_clicked()。 connect(clearButton,SIGNAL(clicked()),listWidget,SLOT(clear()))。 connect(addButton,SIGNAL(clicked()),this,SLOT(...))。 2x clear()。 動作中的信號和槽 { ... emit clicked()。 ... } { ... emit clicked()。 ... } { ... emit clicked()。 ... }
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1