一、安裝配置階段注意點
概要:KK用的QT版本爲5.3.2-windows-x86-msvc2013-64-opengl,由於用習慣了visual studio IDE。所以安裝了的VS2013 addin 1.2.3
1)新建項目時候注意項目編譯位數選擇x64,項目鏈接器中目標計算機選擇x64位計算機
2)設置好後,注意在選定main.cpp的時候進入QT5->QT object settings選擇版本環境
3)脫機執行生成的exe文件時候記住放入對應的動態鏈接庫(開發者可以在QT5安裝目錄設置環境變量)
二、通過connect函數理解信號槽
1)connect函數的理解
connect(sender, signal,
receiver, slot,type);
sender:發出信號的對象
signal:發出的信號
receiver:接收信號的對象
slot:該對象接收到信號後的操作(執行的函數)
type:連接種類模式選擇(暫時不理睬)
2)connect函數的定義,以及重載的五個構造方法
QMetaObject::Connection connect(const QObject *, const char *,
const QObject *, const char *,
Qt::ConnectionType);//傳遞信號爲字符串
QMetaObject::Connection connect(const QObject *, const QMetaMethod &,
const QObject *, const QMetaMethod &,
Qt::ConnectionType);//傳遞信號爲QMetaMethod的引用(QMetaMethod爲方法函數的基類)
QMetaObject::Connection connect(const QObject *, const char *,
const char *,
Qt::ConnectionType);//缺少了接收信號的對象,表示自己給自己發信號(接收對象爲this指針)
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
const QObject *, PointerToMemberFunction,
Qt::ConnectionType);//信號爲指向成員函數的指針
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
Functor);//Funtor類型,代表一些static函數,全局函數,Lambda表達式
現在結合例子:main.cpp
#include "test.h"
#include <QtWidgets/QApplication>
#include<qpushbutton.h>
#include<qfont.h>
#include<qapplication.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton bye("Good Bye");
bye.setGeometry(200, 70, 150, 90);//button的尺寸(非必須)
bye.setFont(QFont("Time", 18, QFont::Bold));//button字體(非必需)
QObject::connect(&bye, &QPushButton::clicked, &QApplication::quit);
bye.show();
return app.exec();
}
結果:
例子中connect函數的參數(第五種重載)分別爲:
&bye //發出信號的對象爲pPushButton的實例bye
&QPushButton::clicked //發出的信號爲點擊
&QApplication::quit //執行了QApplication的static函數quit(),退出程序。
3)對於信號槽的理解
信號槽,實際就是觀察者模式。事件發生後,比如按鈕檢測到自己被點擊了一下,它就會發出一個信號signal。這種發出類似廣播。如果有對象對這個信號感興趣,它就會使用連接(connect)函數,意思是,用自己的一個函數(成爲槽(slot))來處理這個信號。也就是說,當信號發出時,被連接的槽函數會自動被回調。這就類似觀察者模式:當發生了感興趣的事件,某一個操作就會被自動觸發。
4)過氣的QT4
QT4的connect函數定義與重載:
bool connect(const QObject *, const char *,
const QObject *, const char *,
Qt::ConnectionType);
bool connect(const QObject *, const QMetaMethod &,
const QObject *, const QMetaMethod &,
Qt::ConnectionType);
bool connect(const QObject *, const char *,
const char *,
Qt::ConnectionType) const
除了返回值,Qt 4 的connect()函數與 Qt 5 最大的區別在於,Qt 4 的 signal 和 slot 只有const char *這麼一種形式。
實際的用法爲
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton button("Quit");
QObject::connect(&button, SIGNAL(clicked()),
&app, SLOT(quit()));
button.show();
return app.exec();
}
QT4的connect函數使用了SIGNAL和SLOT這兩個宏,將兩個函數名轉換成了字符串,瞭解就行