历史上的今天 首页 传统节日 24节气 企业成立时间 今日 问答 北京今日 重庆今日 天津今日 上海今日 深圳今日 广州今日 东莞今日 武汉今日 成都今日 澳门今日 乌鲁木齐今日 呼和浩特今日 贵阳今日 昆明今日 长春今日 哈尔滨今日 沈阳今日 西宁今日 兰州今日 西安今日 太原今日 青岛今日 合肥今日 南昌今日 长沙今日 开封今日 洛阳今日 郑州今日 保定今日 石家庄今日 温州今日 宁波今日 杭州今日 无锡今日 苏州今日 南京今日 南宁今日 佛山今日 中文/English
首页 > 问答 > qns在Qt框架中如何正确声明信号与槽函数?

qns在Qt框架中如何正确声明信号与槽函数?

蜂蜜柚子茶

问题更新日期:2026-01-25 13:56:14

问题描述

qns到底怎样在Qt框架中正确声明信号与槽函数呢?信号的声明声明位置:信号应在类的
精选答案
最佳答案

qns到底怎样在Qt框架中正确声明信号与槽函数呢?

信号的声明

  • 声明位置:信号应在类的声明中,使用
    plaintext
    复制
    signals
    关键字。这个关键字标记了一个信号区域,该区域内的函数即为信号。信号只能在
    plaintext
    复制
    QObject
    派生类中声明。
  • 声明语法:信号的声明与普通成员函数类似,但没有函数体,且返回类型必须为
    plaintext
    复制
    void
    。例如:
cpp
复制
classMyClass:publicQObject { Q_OBJECT signals: voidmySignal(intvalue); };

槽函数的声明

  • 声明位置:槽函数同样在类的声明中,使用
    plaintext
    复制
    publicslots
    plaintext
    复制
    protectedslots
    plaintext
    复制
    privateslots
    关键字,分别表示不同的访问权限。和信号一样,槽函数也只能在
    plaintext
    复制
    QObject
    派生类中声明。
  • 声明语法:槽函数有函数体,其返回类型通常为
    plaintext
    复制
    void
    ,参数要和与之连接的信号的参数兼容。例如:
cpp
复制
classMyClass:publicQObject { Q_OBJECT publicslots: voidmySlot(intvalue); };

信号与槽的连接

声明好信号和槽函数后,需要使用

plaintext
复制
QObject::connect
函数来建立它们之间的连接。示例如下:

cpp
复制
MyClassobj1,obj2; QObject::connect(&obj1,SIGNAL(mySignal(int)),&obj2,SLOT(mySlot(int)));

在较新的Qt版本中,也推荐使用基于函数指针的连接方式:

cpp
复制
QObject::connect(&obj1,&MyClass::mySignal,&obj2,&MyClass::mySlot);

这种方式在编译时进行类型检查,能更早发现错误。

友情链接: