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这两个宏,将两个函数名转换成了字符串,了解就行

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