一、安装配置阶段注意点
概要: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这两个宏,将两个函数名转换成了字符串,了解就行