一、Qt 5.7.0安装
Qt: qt-opensource-windows-x86-msvc2013_64-5.7.0.exe
Addin:qt-vs-addin-1.2.5.exe
Visual Studio: Visual Studio 2013
刚开始安装结束之后,新建项目(没有任何改动),编译——一直失败
错误1:Qt cannot find the executable
解决:项目保存路径中有中文
错误2:'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
解决:去掉勾选“使用jom代替nmake”
二、信号和槽机制
Qt中信号和槽机制 <==> vs中的消息处理机制(消息和消息相应函数)
- 信号:声明了信号的对象,当其状态改变时,信号就由该对象发射出去,而且该对象只负责发送信号,它不知道另一端是谁 在接收这个信号。
- 槽:槽用于接收和处理信号,一个槽并不知道是否有任何信号与自己相连接
信号:
signals关键字:信号的声明(在类的头文件中)
emit关键字:发送信号
1.所有的信号声明都是公共的,所以Qt规定不能在signals前面加public,private, protected。
2.所有的信号都没有返回值,所以返回值都用void。
3.所有的信号都不需要定义。
4.必须直接或间接继承自QOBject类,并且开头私有声明包含Q_OBJECT。
5.当一个信号发出时,会立即执行其槽函数,等待槽函数执行完毕后,才会执行后面的代码,如果一个信号链接了多个槽,那么会等所有的槽函数执行完毕后才执行后面的代码,槽函数的执行顺序是按照它们链接时的顺序执行的。
6.在链接信号和槽时,可以设置链接方式为:在发出信号后,不需要等待槽函数执行完,而是直接执行后面的代码。
7.发出信号使用emit关键字。
8.信号参数的个数不得少于槽参数的个数。
作者:小豆君的干货铺
链接:https://www.jianshu.com/p/e96c9f66da80
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
信号函数:
- 函数返回值是void类型
- 开发人员只能声明、不能实现信号函数
- 只有包含一个信号函数那个类及其派生类才能使用该信号函数
- 信号函数的参数个数、类型由开发人员设定,这些参数的职责是封装类的状态信息,并将这些信息传递给槽函数
- 只有QObject及其派生类才可声明信号函数
槽:
槽函数和普通的C++成员函数一样,可以被正常调用
唯一的特殊性就是很多信号可以与其相关联
与其关联的信号被发射时,这个槽就会被调用
槽函数可以是 public、protected、private
信号与槽的关联:
通过调用QObject::connect()函数可以绑定一个信号函数和一个槽函数
connect( sender, SIGNAL ( signal_func() ), receiver, SLOT( slot_func()) )
- sender及receiver 是指向对象的指针,前者指向发射对象,后者指向处理对象
- signal_func以及slot_func分别是这两个对象中定义的信号函数和槽函数。
connect函数的作用:将sender对象中的信号SIGNAL与receiver中的SLOT槽函数联系起来。当指定信号SIGNAL时必须使用QT的宏SIGNAL(),当指定槽函数时必须使用宏SLOT()。如果发射者与接收者属于同一个对象的话,那么在connect调用中接收者参数可以省略。
实际上的静态创建和动态创建
静态创建:在ui中拖动空间,在需要设置的控件中设置槽。
private slots ==> 声明槽函数
动态创建:不用在ui上放置控件,而是直接在代码中添加创建。
信号:Button 按钮
槽:on_button_clicked()
dialog.h头文件
dialog.cpp文件
槽函数:
按钮的作用:点击按钮之后文字从“快来点我”变成“你真厉害”
动态创建中出现的错误: LNK2019: 无法解析的外部符号
原因:定义了信号、槽函数、connect函数,但是忘记实现了槽函数
解决:实现槽函数(dialog.cpp)