QT(一):信号与槽

原文地址:https://houkaifa.com/2019/02/18/LearningNotes-QT-01/

概述

分别通过 QT Designer 与 connect 函数添加(绑定)信号与槽。
环境:Win10 + VS2017 + QT5.9.2。
实现内容:点击按钮退出程序、点击按钮弹出信息框。

QT(一):信号与槽_第1张图片


一、建立 QT 项目

打开 Visual Studio 2017,新建 QT GUI Application。

QT(一):信号与槽_第2张图片

一路 Next,Finish。

QT(一):信号与槽_第3张图片

下图是初始目录结构:

QT(一):信号与槽_第4张图片

F5调试程序,看到初始的GUI界面:

QT(一):信号与槽_第5张图片

二、使用 QT Designer 添加信号与槽

在解决方案中,找到默认生成的.ui文件,双击以在 QT Designer 中打开。

QT(一):信号与槽_第6张图片

在 Widget Box 中拖拽 Push Button 到主窗口上。

QT(一):信号与槽_第7张图片

在属性编辑器中修改 objectName、text 的值为 “closeButton”。

其中 objectName 是 Widget 组件的组件名,text 是显示在按钮上的标题。text 值还可以通过双击添加的按钮来快速修改。

QT(一):信号与槽_第8张图片

随后在信号/槽编辑器中添加信号槽。

发送者为按钮 closeButton,信号为 clicked() 即鼠标左键单击信号(事件/event),接收者为 QtGuiApplicationClass,槽为 close(),即 QtGuiApplicationClass 的销毁函数。

QT(一):信号与槽_第9张图片

Ctrl+S 保存修改,回到 VS2017,F5调试程序,点击 closeButton 按钮,程序退出。

信号与槽是 QtGui 开发当中事件的表示形式,信号即是事件的触发条件,槽即是信号所触发的事件处理函数。
在 Qt Designer 中可以通过信号/槽编辑器方便地添加一些原生的信号槽。后文描述了如何添加自定义的槽。

三、通过 connect 函数绑定自定义槽

在 QT Designer 中添加一个新的按钮,相关属性修改为 MessageButton,现在我们有了两个按钮。

QT(一):信号与槽_第10张图片

回到 VS2017,转到.h文件中,添加槽的定义。

其中函数名及返回值类型是固定的格式:void on_WidgetName_Event()。
此处 WidgetName 是 MessageButton,对应的事件是 clicked,因此可以在下图中看到,完整函数声明是:

void on_MessageButton_clicked();

QT(一):信号与槽_第11张图片

如果.h文件中出现 ui_*.h文件的包含错误,如下图:
QT(一):信号与槽_第12张图片
只需在 VS2017 的 QT VS Tools 菜单栏中选择 Convert Project to QMake Generated Project 即可解决。
QT(一):信号与槽_第13张图片

之后就可以跳转到对应的.cpp文件添加函数的实现了。

这里使用了 QMessageBox 类中的 warning 函数,用以显示警告信息框。在 QMessageBox 头文件中提供了丰富的信息框样式,对应的调用其中的信息框需要在.h文件中包含其头文件。

#include 

QT(一):信号与槽_第14张图片

截至目前,我们添加了一个按钮 MessageButton,定义并实现了其一个槽函数(on_MessageButton_clicked)。

但是现在我们运行程序,单击 messageButton 按钮是不会有任何反应的,因为我们只完成了槽函数的定义和实现,下面我们在 QtGui 类的构造函数处,将信号与槽通过 connect 函数进行连接。

QT(一):信号与槽_第15张图片

此处 connect 函数的原型如下:

static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
                        const QObject *receiver, const QMetaMethod &method,
                        Qt::ConnectionType type = Qt::AutoConnection);

至此,F5调试程序,按下按钮可以看到弹出了信息框。

QT(一):信号与槽_第16张图片

你可能感兴趣的:(学习笔记,QT)