QT5知識點記錄梳理(一)

一、安裝配置階段注意點


概要: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這兩個宏,將兩個函數名轉換成了字符串,瞭解就行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章