QT5知识点记录梳理(一)

来源:互联网 发布:经典网络歌曲 编辑:程序博客网 时间:2024/05/22 07:53

一、安装配置阶段注意点


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

原创粉丝点击