首页 > 其他分享 >QT的信号与槽

QT的信号与槽

时间:2024-10-15 22:17:48浏览次数:3  
标签:clicked QT 函数 QObject connect 信号 lambda

提出疑问:界面上已经有的按键,怎么操作才能让用户按下按键后有操作上的反应呢?

在 Qt 中,信号和槽机制是一种非常强大的事件通信机制。这是一个重要的概念,特别是对于初学者来 说,理解它对于编写 Qt 程序至关重要。

信号 (Signals):是由对象在特定事件发生时发出的消息。例如,QPushButton 有一个 clicked() 信号,当用户点击按钮时发出。

槽 (Slots):是用来响应信号的方法。一个槽可以是任何函数,当其关联的信号被发出时,该槽函数 将被调用。

连接信号和槽:使用 QObject::connect() 方法将信号连接到槽。当信号发出时,关联的槽函数 会自动执行。 

 

是静态成员函数,静态成员函数可以通过类名直接调用,而不需要创建类的实例。在类内部,静态成员函数也可以通过 类名::函数名 的方式进行调用,但通常直接使用 函数名 即可!

 

自动连接(使用UI 文件)

 

 

 

功能:点击PushButton按钮会关闭窗口 

这种方法是由程序自动编写代码

系统自动编写的代码在这里!

连线方式(不常用)

 

记得勾选:显示从QWidget继承的信号与槽!!! 

但它最终还是会生成下面这些信息 

 

然后按编辑控件退出编辑信号/槽

转到槽的方式

 

 会自动在头文件声明槽和实现槽

 

代码

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //在构造函数中进行信号与槽的绑定
    //QObject::connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
    //QObject::connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(on_pushButton2_clicked()));
    connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(on_pushButton2_clicked()));
    //在类内使用静态函数不用加QObject::(类名::),因为这个Widget间接继承之QObject
    //on_pushButton2_clicked()记得先声明
}

Lambda表达式

错误写法 

    //lambda表达式QObject::connect(sender,&Sender::signal,[=](){/*lambda body*/});
    //&Sender::signal,这里的Sender是类名
    connect(ui->btn_lambda,&QPushButton::clicked(),[=](){
         qDebug()<<"lambda";
    });

你需要确保信号的参数与槽的参数完全匹配,所以对于QPushButtonclicked()信号,它是一个没有参数的信号。这意味着任何连接到这个信号的槽或lambda表达式也不能有参数。 

clicked()本身是一个信号,不是一个可以调用的函数或方法。在connect函数中,你应该传递信号的地址(即&QPushButton::clicked),而不是尝试调用它。

正确写法

    //lambda表达式QObject::connect(sender,&Sender::signal,[=](){/*lambda body*/});
    //&Sender::signal,这里的Sender是类名
    connect(ui->btn_lambda,&QPushButton::clicked,[=](){
         qDebug()<<"lambda";
    });

当使用lambda表达式作为槽时,不需要显式地指明接收者(即this)。你不需要指定一个特定的接收者对象,因为lambda表达式本身就是一个可以内联定义的函数对象。

使用函数指针

    //函数指针方式:QObject::connect(sender,&Sender::signal,receiver,&receiver::slot);
    connect(ui->btn_pointer,&QPushButton::clicked,this,&Widget::on_btnPointer_clicked);
private slots:
    void on_btnPointer_clicked();
void Widget::on_btnPointer_clicked()
{
    qDebug()<<"pointer";
}

 

 

 

 

 

 

 

 

标签:clicked,QT,函数,QObject,connect,信号,lambda
From: https://blog.csdn.net/m0_62407354/article/details/142957193

相关文章

  • 自定义信号与槽
    在Qt中,自定义信号与槽是实现对象间通信的一种机制。信号和槽是Qt对象通信的核心特性,使得一个对象能够在发生某种事件时通知其他对象。自定义信号与槽的实现步骤如下:定义信号:在Qt中,信号是由signals关键字声明的类成员函数。它们不需要实现,只需声明。classMyClass:publi......
  • MQTTnet.Server同时支持mqtt及websocket协议
    Net6后写法 Net6前写法Program.csusingMicrosoft.AspNetCore.Hosting;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.Hosting;usingMQTTnet.AspNetCore;usingSystem;usingSystem.IO;namespaceMQTTnet.Server{publicclassProgra......
  • PyQt5开发环境搭建和配置
    PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。课程目标可以动手实现简单的GUI程序。系列文章主要以动手实践案例讲解为主。课程对象会一些......
  • day03(C++)信号槽
    目录1.概念2.函数原型3.连接方式3.1自带信号→自带槽3.2自带信号→自定义槽3.3自定义信号4.信号槽传参5.对应关系5.1一对多5.2多对一信号槽1.概念之前的程序界面只能看,不能交互,信号槽可以让界面进行人机交互。信号槽是Qt在C++基础上新增的......
  • 【QT】常用控件(一)
    个人主页~常用控件一、控件是什么二、QWidget核心属性1、enabled2、geometry3、windowTitle4、windowIcon5、windowOpacity6、cursor7、font8、toolTip9、focusPolicy10、styleSheet一、控件是什么ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满......
  • 【qt】一个动画实现
    基于https://www.bilibili.com/video/BV1Li421Y7EH/?spm_id_from=333.999.top_right_bar_window_history.content.click原理的一个qt实现#pragmaonce#include<QWidget>#include"ui_Worm.h"#include<QPointF>#include<QList>#include<QPai......
  • qt入门介绍
    一、Qt简介Qt是一个基于C++的图形用户界面(GUI)框架,可以开发可视化人机交互程序,但是这并不是Qt的全部。Qt除了可以绘制漂亮的界面外,还包含很多其他的功能:多线程、数据库、图像处理、音视频处理、网络通信、文件IO等。二.Qt优势跨平台:一次编程,到处编译。面向对象开发丰......
  • Qt打印日志
    不使用第三方库,直接使用Qt实现日志打印,demo下载#include"QtLog.h"#include<QtWidgets/QApplication>#include<QMutex>#include<QFile>#include<QDir>#include<QDateTime>#include<QCoreApplication>#include<QApplication>......
  • 【Linux】解析信号的本质&相关函数及指令的介绍
    前言大家好吖,欢迎来到YY滴Linux系列,热烈欢迎!本章主要内容面向接触过C++的老铁主要内容含:欢迎订阅YY滴C++专栏!更多干货持续更新!以下是传送门!YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《初学者易错点》......
  • Qt/C++编写的mqtt调试助手使用说明
    一、使用说明第一步,选择协议前缀,可选mqtt://、mqtts://、ws://、wss://四种,带s结尾的是走ssl通信,ws表示走websocket通信。一般选默认的mqtt://就好。第二步,填写服务所在主机地址,可以是IP地址也可以是网址,只要真实存在的就行。第三步,填写通信所用端口号,mqtt默认端口号是1883,以......