c调用c++ qt_【C/C++】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
#include
#include
#include
#include
#include
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引進的一種處理機制,信號可以被理解為一個對象發出的事件請求,槽是處理信號的函數。
設計信號和槽的機制是為了避免回調函數的缺點。回調函數是一個函數指針,如果希望一個處理函數發出一些通知事件,可以把另一個函數的指針傳遞給處理函數,處理函數在適當的時候使用函數指針回調通知函數。從回調函數的調用過程可以看出,回調函數存在類型不安全和參數不安全的缺點。因為對于調用函數來說,通過函數指針無法判斷出函數的返回類型以及參數類型。
信號和槽能完成回調函數的所有功能,并且信號和槽機制是類型安全的,而且還能完成其他許多復雜的功能。
信號和槽不僅是單一的對應關系,還可以是多對多的關系。一個信號可以被連接到多個槽,一個槽也可以響應多個信號,此外,信號之間也可以被連接。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c调用c++ qt_【C/C++】qt库结构及示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql出现can t_php运行提示
- 下一篇: webrtc agc matlab,c+