QT庫結構安全
Qt圖形庫是一個組織嚴謹的C++類庫,其結構如圖所示app
細說Qt庫ide
Qt類庫中包含了上百個類,結構十分複雜,上圖展現了Qt_3.2類庫的基本結構。函數
Qt類庫中的類能夠分紅兩種類型:佈局
一種是直接或者繼承自Qt類spa
另外一種是獨立的,不從任何類集成設計
獨立的類在Qt庫中通常用來完成獨立的功能,例如操做XML文件的QXmlReader類。指針
直接從從Qt類繼承的類主要能夠分紅QObject類和QEvent類。QObject類是全部應用組件的基類,QEvent類是全部QT事件響應類的基類。其餘的還有QCursor、QPen、QTab等類描述的窗口組件能夠在窗體的任意地方出現,所以直接從Qt基類繼承。對象
QWidget類是組件容器,全部能夠結合在一塊兒的組件都從該類繼承。QWidget類繼承自QObject類,由於全部的窗體組件都是應用組件的一部分。blog
Qt類庫組織合理,在使用的時候按照類的集成關係操做。如QButton、QSlider等組件能夠被加入到QWidget對象中,而QProcess、QTimer組件是不能加入到QWidget對象中的。
示例效果
工程源碼
/* *功能:滑動Slider控件的滑塊時,Spin控件的數值相應改變。一樣的,在修改Spin控件值的時候,Slider控件的數值也相應變化 */ #include <qapplication.h> #include <qpushbutton.h> #include <qlayout.h> #include <qslider.h> #include <qspinbox.h> #include <qwidget.h> class MyWidget : public QWidget { public: MyWidget(QWidget *parent=0); //聲明MyWidget類的構造函數 }; //注意分號 MyWidget::MyWidget(QWidget *parent):QWidget(parent) { QSpinBox *agenum_sb=new QSpinBox(); agenum_sb->setRange(0,100); agenum_sb->setValue(0); QSlider *agenum_sl=new QSlider(Qt::Horizontal); agenum_sl->setRange(0,100); agenum_sl->setValue(0); connect(agenum_sb,SIGNAL(valueChanged(int)),agenum_sl,SLOT(setValue(int))); //設置Spin控件修改數值響應函數,將Spin控件改變數值的事件與Slider控件關聯 connect(agenum_sl,SIGNAL(valueChanged(int)),agenum_sb,SLOT(setValue(int))); //設置SLider控件修改數值響應函數,將Slider控件改變數值的事件與Spin控件關聯 QHBoxLayout *layout=new QHBoxLayout; //建立列布局的對象 layout->addWidget(agenum_sb); layout->addWidget(agenum_sl); setLayout(layout); //設置MyWidget使用列布局 setWindowTitle("Enter a number By-Mystery"); //設置窗體標題 } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); }
Qt中信號與槽系統
源碼中的connect()函數原型爲:connect(boject1, signal, object2, slot);
其中,Object1和Object2分別表明兩個不一樣的Qt對象(繼承自QObject基類),signal表明Object的信號,slot表明Object2的槽。
信號和槽是Qt引進的一種處理機制,信號能夠被理解爲一個對象發出的事件請求,槽是處理信號的函數。
設計信號和槽的機制是爲了不回調函數的缺點。回調函數是一個函數指針,若是但願一個處理函數發出一些通知事件,能夠把另外一個函數的指針傳遞給處理函數,處理函數在適當的時候使用函數指針回調通知函數。從回調函數的調用過程能夠看出,回調函數存在類型不安全和參數不安全的缺點。由於對於調用函數來講,經過函數指針沒法判斷出函數的返回類型以及參數類型。
信號和槽能完成回調函數的全部功能,而且信號和槽機制是類型安全的,並且還能完成其餘許多複雜的功能。
信號和槽不只是單一的對應關係,還能夠是多對多的關係。一個信號能夠被鏈接到多個槽,一個槽也能夠響應多個信號,此外,信號之間也能夠被鏈接。
本文出自 「成鵬致遠」 博客,請務必保留此出處http://infohacker.blog.51cto.com/6751239/1199405