当前位置: 首页 > article >正文

【Qt】信号和槽简介

        信号与槽是 Qt编程的基础,也是 Qt的一大创新。有了信号与槽的编程机制,在 Qt 中处理界面上各个组件的交互操作就变得比较直观和简单。

        信号(signal)是在特定情况下被发射的通知,例如QPushButton较常见的信号就是点击鼠标时发射的 clicked()信号。GUI程序设计的主要工作就是对界面上各组件的信号进行响应,只需要
知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。

        槽(slot)是对信号进行响应的函数。槽就是函数,所以也称为槽函数。槽函数与一般的 C++
函数一样,可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与信号关联,当信号被发射时,关联的槽函数被自动运行。

        将信号和槽关联起来的函数时connect(),其声明如下:

connect(const QObject *sender, const char *signal,const QObject *receiver, 
        const char *member, Qt::ConnectionType = Qt::AutoConnection);

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

connect(const QObject *sender, const char *signal,const char *member,
        Qt::ConnectionType type = Qt::AutoConnection) const;

        sender是发射信号的对象的名称;signal是信号,信号可以看作特殊的函数,需要带有括号,有参数时还需要指明各参数类型;receiver是接收信号的对象的名称;slot()是槽函数,需要带有括号,有参数时还需要指明各参数类型。关于信号与槽的使用,有以下一些规则需要注意:

        1、一个信号可以连接多个槽函数。

        2、多个信号可以连接同一个槽函数。

        3、一个信号可以连接另一个信号。

        4、信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参如果参数不匹配,会出现编译错误或运行错误。

        5、在使用信号与槽的类中,必须在类的定义中插入宏Q_OBJECT。

        6、当一个信号被发射时,与其关联的槽函数通常被立即运行,就像正常调用函数一样。只有当信号关联的所有槽函数运行完毕后,才运行发射信号处后面的代码。

    QPushButton *button1 = new QPushButton(this);
    button1->setText("按钮");
    //button1->setParent(this);
    button1->move(0,0);
    button1->resize(200,100);

    connect(button1,&QPushButton::clicked,this,&QWidget::close);

上述代码就是信号和槽的简单实例


http://www.kler.cn/a/526070.html

相关文章:

  • Linux工具使用
  • SQL注入漏洞之绕过[前端 服务端 waf]限制 以及 防御手法 一篇文章给你搞定
  • NLP自然语言处理通识
  • 全面解析文件上传下载删除漏洞:风险与应对
  • Haproxy入门学习二
  • 关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题
  • vue相关的页面和js编写
  • Fork/Join框架_任务分解与并行执行
  • 智慧园区管理平台实现智能整合提升企业运营模式与管理效率
  • 记录一次Sqoop从MySQL导入数据到Hive问题的排查经过
  • 使用Swiper构建运营推荐位
  • 【蓝桥杯省赛真题02】C++猫吃鱼 第十届蓝桥杯青少年创意编程大赛 算法思维 C++编程省赛真题解
  • JAVASE入门十二脚-file,IO流
  • 【DeepSeek-V3】AI Model Evaluation Framework and index schedule AI模型能力评价指标及对比
  • 395. 至少有K个重复字符的最长子串
  • continuous batching、chunked-prefill相关概念
  • springboot3 集成 knife4j(接口文档)
  • 【前端学习路线】前端工程化 详细知识点学习路径(附学习资源)
  • 【 CVE-2025-21298】 通过ghidriff查看完整补丁差异
  • 使用SearchCursor检索要素类中的要素
  • 【深度分析】DeepSeek大模型技术解析:从架构到应用的全面探索
  • Go语言编程基础
  • MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式
  • Pyside/Pyqt中QWebEngineView和QWebEnginePage的区别
  • 5.桥模式(Bridge)
  • 《大语言模型》综述学习笔记