QT Creator应用程序开发——信号与槽

简介: QT Creator应用程序开发——信号与槽

一、QWidget基础窗口控件


QWidget类是所有用户页面对象的基类,称为基础窗口控件,是一块矩形的页面可视区域,且它也可以包含其它控件,包含的子控件会在该区域中显示并覆盖,例如创建一个窗口对象w,由于窗口对象默认不会显示,必须要调用show()方法显示窗口:

MainWindow w;
w.show();

1667188337484.jpg


常用的QWidget类控件成员函数有以下(使用时需包含#include < QWidget >头文件):

1、void QWidget::setGeometry(int x,int y,int w,int h)用于设置窗口的位置和大小;

2、void QWidget::move(int x,int y)用于更改窗口的位置;

3、void QWidget::setWindowTitel(const QString &)用于设置窗口的标题;

4、void QWidget::seWindowState(Qt::WindowStates windowState)用于设置窗口当前的状态,如全屏,最小化等等。

例如设置一个窗口,x偏移为100,y偏移为200,大小为500×300的窗口,窗口的标题为“标题2022-3-3”,在mian.cpp中写代码:

//main.cpp
#include <QApplication>//包含一个应用程序的类的头文件
#include <QWidget>              //包含一个窗口类的头文件
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;                                  //添加窗口
    w.setGeometry(100,200,500,300);             //设置窗口的位置和大小
    w.setWindowTitle("标题2022-3-3");           //设置窗口的标题
    w.show();
    return a.exec();
}

运行结果如下:

1667188421715.jpg


二、信号与槽实例


这里通过一个信号与槽的实例来理解信号与槽的相关知识。


例、通过信号与槽实现当用户点击一个按钮控件时,窗口关闭。


首先这里只用到main.cpp源文件,未用到.ui页面,整个程序步骤可以这样理解:

1、首先创建一个QWidget窗口,然后在该窗口上添加一个QPushButton按钮,这里就要通过#include包含这两个类的头文件,如下:

#include <QWidget>//包含一个窗口类的头文件
#include <QPushButton>//包含一个按钮类的头文件

1667188509469.jpg

然后添加一个窗口对象w以及一个按钮对象Button,由于是与用户交互的,要实现当点击按钮窗口关闭这一事件,所以按钮上的文字为“点击按钮关闭”,如下:

QWidget w;//添加窗口
QPushButton Button("点击按钮关闭",&w);//添加一个按钮


1667188546462.jpg

2、设置窗口与按钮的位置和大小,这里都是通过通过QWidget控件成员函数的setGeometry()来设置窗口与按钮的位置和大小,这里简单介绍一下该成员函数的含义:

1667188632413.jpg

这里的参数设置如下,可自行设置:

w.setGeometry(100,100,350,250);//设置窗口的位置和大小
Button.setGeometry(10,10,100,40);//设置按钮的位置和大小

1667188646316.jpg


3、通过connect()函数实现信号和槽

接下来就是设置信号与槽,槽是对信号做出的响应动作,信号和槽都可以通过函数表示,即信号函数和槽函数,这里简单介绍一下实现信号与槽的函数connect(),函数connect() 是QObject类中的一个静态成员函数,通过QObject::connect()方式调用,它的参数解释如下:

1667188661553.jpg

也就是通过connect()函数将Button按钮的clicked()信号函数与w窗口的close()槽函数关联起来:

QObject::connect(&Button,&QPushButton::clicked,&w,&QWidget::close);

1667188694856.jpg

4、完整代码

由于没使用mainwindow.h头文件,所以第一行可以删去,main.cpp的完整代码如下:

//main.cpp
#include <QApplication>//包含一个应用程序的类的头文件
#include <QWidget>              //包含一个窗口类的头文件
#include <QPushButton>          //包含一个按钮类的头文件
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;                                  //添加窗口
    QPushButton Button("点击按钮关闭",&w);        //添加一个按钮
    w.setGeometry(100,100,350,250);             //设置窗口的位置和大小
    Button.setGeometry(10,10,100,40);           //设置按钮的位置和大小
    QObject::connect(&Button,&QPushButton::clicked,&w,&QWidget::close);//实现信号与槽
    w.show();
    return a.exec();
}


5、执行代码,观察结果

点击左下角的绿色三角,执行代码,如下:

1667188711325.jpg

可看到出现的窗口位于屏幕的位置如代码中设置:

1667188729760.jpg

当鼠标点击按钮,窗口关闭:

1667188740147.jpg

达到实现要求!


三、信号与槽的补充知识


1、一个connect()函数只能关联一个信号函数和一个槽函数,程序中可包含多个connect()函数,从而实现以下操作:

1667188754517.jpg

另外还可以通过connect()函数中的method参数实现信号之间的关联,从而一次发出多个信号。

2、并不是所有的控件之间都可以通过信号与槽关联起来,控件类要直接或间接继承自QObject类,且控件类必须包含private属性的Q_OBJECT宏。


相关文章
|
11天前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
31 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
1天前
|
监控 Python
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
16 3
|
19天前
Qt安装之后添加或移除组件(Qt Creator 10.0.1)
Qt安装之后添加或移除组件(Qt Creator 10.0.1)
19 2
|
19天前
|
C++
Qt信号和槽
Qt信号和槽
16 2
|
19天前
Qt之HelloWord(Qt Creator 10)
Qt之HelloWord(Qt Creator 10)
14 2
|
27天前
|
IDE 开发工具 数据安全/隐私保护
【干货】Qt Creator快速下载、安装、使用教程
【干货】Qt Creator快速下载、安装、使用教程
95 2
|
12天前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
|
26天前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
26天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
|
26天前
|
SQL 数据可视化 关系型数据库
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计