【Qt】qt庫結構及示例


QT庫結構

  Qt圖形庫是一個組織嚴謹的C++類庫,其結構如圖所示

 


細說Qt庫

  Qt類庫中包含了上百個類,結構十分復雜,上圖展示了Qt_3.2類庫的基本結構。

  Qt類庫中的類可以分成兩種類型:

    • 一種是直接或者繼承自Qt類

    • 另一種是獨立的,不從任何類集成

  獨立的類在Qt庫中一般用來完成獨立的功能,例如操作XML文件的QXmlReader類。

  直接從從Qt類繼承的類主要可以分成QObject類和QEvent類。QObject類是所有應用組件的基類QEvent類是所有QT事件響應類的基類。其他的還有QCursor、QPen、QTab等類描述的窗口組件可以在窗體的任意地方出現,因此直接從Qt基類繼承。

QWidget類是組件容器,所有可以結合在一起的組件都從該類繼承。QWidget類繼承自QObject類,因為所有的窗體組件都是應用組件的一部分。

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM