首页 > 其他分享 >[QT入门]信号与槽

[QT入门]信号与槽

时间:2024-06-30 22:58:42浏览次数:19  
标签:clicked 函数 入门 MyButton onButtonClicked 信号 public QT

一、什么是信号与槽?

在Qt框架中,信号与槽(Signal and Slot)机制是其核心特性之一,它提供了一种高效且安全的方式来处理对象之间的通信。信号与槽机制基于观察者模式,允许一个对象(信号发出者)在特定事件发生时通知另一个或多个对象(槽接收者)。

二、概念详解

1.信号(Signal)

信号是Qt对象中的特殊成员函数,当特定事件发生时,它会被自动调用。信号本身并不执行任何操作,它只是简单地发出一个通知。信号的声明需要使用signals关键字,并且只能声明,不能定义(即没有函数体)。

示例:

class MyButton : public QPushButton {  
    Q_OBJECT  
public:  
    MyButton(QWidget *parent = nullptr);  
signals:  
    void clicked(); // 信号声明  
};

2.槽(Slot)

槽是普通的C++成员函数,可以像其他成员函数一样在类中被声明和使用。槽的主要作用是响应信号,执行相应的操作。槽函数可以是任何访问修饰符(public, protected, private),并且可以被重载。在Qt中,槽函数通常使用slots关键字进行声明(但在Qt 5中,slots关键字是可选的)。

示例:

class MyWidget : public QWidget {  
    Q_OBJECT  
public:  
    MyWidget(QWidget *parent = nullptr);  
public slots:  
    void onButtonClicked(); // 槽声明  
};

3.连接(Connect)

连接操作是将信号和槽关联起来的过程。当信号被发射时,与之关联的槽函数会被自动调用。Qt提供了connect()函数来实现这一功能。

示例:

MyButton *button = new MyButton();  
MyWidget *widget = new MyWidget();  
connect(button, &MyButton::clicked, widget, &MyWidget::onButtonClicked);

4.断开连接(Disconnect)

在某些情况下,可能需要断开信号和槽之间的连接。Qt提供了disconnect()函数来实现这一功能。

示例:

disconnect(button, &MyButton::clicked, widget, &MyWidget::onButtonClicked);

三、举例

我们定义一个自定义的MyButton类,它继承自QPushButton。在MyButton的构造函数中,我们使用connect()函数将clicked()信号与onButtonClicked()槽函数连接起来。当按钮被点击时,clicked()信号会被发射,从而触发onButtonClicked()槽函数的执行。在onButtonClicked()槽函数中,我们使用QMessageBox::information()函数弹出一个信息框来显示“Button clicked!”的消息。

#include <QApplication>  
#include <QPushButton>  
#include <QMessageBox>  
  
class MyButton : public QPushButton {  
    Q_OBJECT  
public:  
    MyButton(QWidget *parent = nullptr) : QPushButton(parent) {  
        connect(this, &MyButton::clicked, this, &MyButton::onButtonClicked);  
    }  
  
private slots:  
    void onButtonClicked() {  
        QMessageBox::information(this, "Information", "Button clicked!");  
    }  
};  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
    MyButton button;  
    button.setText("Click Me!");  
    button.show();  
    return app.exec();  
}

标签:clicked,函数,入门,MyButton,onButtonClicked,信号,public,QT
From: https://blog.csdn.net/weixin_45843323/article/details/140087991

相关文章

  • ArcTs布局入门01——线性布局(Row/Column)
    如果你对鸿蒙开发感兴趣,加入“Harmony自习室”吧~......
  • Qt下载安装及配置教程
    文章目录1. QT简介2. 下载QT3.检查配置环境4.创建QT项目1. QT简介Qt是一个跨平台C++图形用户界面(GUI)工具包,它由Qt公司(前身为Trolltech)开发和维护。自1995年发布以来,Qt因其强大的功能和跨平台能力,成为了许多软件开发者的首选工具。无论是在桌面应用程序、移动应用......
  • 【linux】从零到入门
     linux概述Linux是一个免费使用和自由传播的一套操作系统。用户可以无偿地得到它地源代码,和大量地应用程序,并且可以随意修改和增加它们。Linux的内核起初由林纳斯编写。内核是啥?驱动设备,文件系统,进程管理,网络通信等等……内核其实不是一个完整的操作系统。厂家将内核和各......
  • 【python】一篇文零基础到入门:快来玩吧~
    本笔记材料源于:PyCharm|创建你的第一个项目_哔哩哔哩_bilibiliPython语法及入门(超全超详细)专为Python零基础一篇博客让你完全掌握Python语法-CSDN博客0为什么安装python和pycharm?不同于c,c++,这些语言需要编译器转成机器码,然后执行。python可以靠解释器逐行转换,执行。......
  • C语言大师之路:从零到王者/新手入门(3)选择语句
    序(一些闲话)我希望我的语言不要像专业书那样让人眼花缭乱,所以当我解释语法时,我会尽量避免使用太多专业术语,让说明更容易理解。我会用通俗易懂的语言来解释,而不是像专业书籍那样让人感到困惑。本人计划通过文章分享C语言的核心知识点和学习心得。鉴于仍处于学习阶段,文章中可......
  • 第二章 MATLAB入门知识 第三节
    常见的特殊变量:特殊变量描述ans系统默认的用于保存运算结果的变量名pi圆周率π>>pi ans=3.1426inf/-inf无穷大和负无穷大,注意1/0=inf正常0不能做分母但是MATLAB可以NaN不定值或缺失值。例如计算0/0或0*Inf会返回NaNi和j负数中的虚数单位,例如3+4i和3......
  • 第二章 MATLAB入门知识 第二节
    MATLAB的帮助系统【以sum函数为例】方法1:Documentation-MATLAB&Simulink-MathWorks中国方法2:使用doc命令>>docsum方法3:使用help命令>>helpsum方法4:使用edit命令>>editsum小技巧:代码中%开头的语句是MATLAB的注释信息,在运行代码时注释信息不会被执行。MATLAB......
  • Perl语言入门学习:从基础到实践
    Perl,全称为“PracticalExtractionandReportingLanguage”,是一种高效、灵活的编程语言,尤其擅长于文本处理、系统管理和报告生成。其丰富的库支持和正则表达式能力,让Perl成为数据挖掘、日志分析和自动化脚本编写的理想选择。本文旨在引导初学者迈出Perl编程的第一步,通过实际......
  • Vue - 入门
    零:前端目前形势前端的发展史HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看Ajax的出现->后台发送异步请求,Render+Ajax混合单用Ajax(加载数据,DO......
  • PHP 面向对象编程(OOP)入门指南
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程范式,通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言,支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法,并提供示例代码帮助理解。一、面向对象编程的基本概念1.1类和对象......