Qt私有信号实现(private signal)

 更新时间:2023年10月25日 15:09:07   作者:为啥不吃肉捏  
在使用Qt信号槽机制的时候,有时候我们需要一个信号只能由类内发出,而不允许使用该类对象的用户发出,此时就需要私有信号的支持,本文主要介绍了Qt私有信号实现(private signal),感兴趣的可以了解一下

在使用Qt信号槽机制的时候,有时候我们需要一个信号只能由类内发出,而不允许使用该类对象的用户发出,此时就需要私有信号的支持,而信号的关键字 signals,点进去它的实现,大概如下:

signals:

再次点进去:

继续:

可以看到,无论你使用 private 也好,protected也好,最后预处理宏展开的时候都会被加上 public,想使用私有信号需要一点小技巧;

方法一:使用 QPrivateData 作为信号参数占位

signals:
    void privateSignal(QPrivateSignal);

QPrivateSignal类型,被声明在 Q_OBJECT 宏中,是一个私有的空数据类型,使用QPrivateSignal作为参数,由于它是私有的,所以外部使用这个信号的时候,无法调用这个私有类型,实现了私有信号;另一方面,槽函数连接的时候,参数可以被忽略,这样用户连接这个信号的时候不受影响;(你也可以自己定义一个私有的类型,作为信号参数,实现私有信号)

方法二:标记 Q_SIGNAL

private:
    Q_SIGNAL void privateSignal();

Q_SIGNAL宏,在旧的Qt版本中用于信号的声明,Qt5之后不再推荐使用,在此使用这个宏强行声明信号,也可以实现私有信号;与上面一种方法不同的是,这里没有使用 signals 关键字标识以下声明为信号,但是使用了 private 关键字标识了私有权限,在语义方面,各有优劣;这种方法还有一个不太灵活的地方:用户无法连接此信号,因为private关键字限定了它;这个用法,适用于信号只在类内部使用的情况。

两种方法无法评价优劣,应在合适的场景选择合适的实现。

到此这篇关于Qt私有信号实现(private signal)的文章就介绍到这了,更多相关Qt私有信号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 排序插入排序实例详解

    C++ 排序插入排序实例详解

    这篇文章主要介绍了C++ 排序插入排序实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Qt中QList与QLinkedList类的常用方法总结

    Qt中QList与QLinkedList类的常用方法总结

    这篇文章主要为大家详细介绍了Qt中QList与QLinkedList类的常用方法,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2022-12-12
  • C++实现飞机大战

    C++实现飞机大战

    这篇文章主要为大家详细介绍了C++实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • c++ std::invalid_argument应用

    c++ std::invalid_argument应用

    想研究std::invalid_argument的朋友可以参考下
    2013-01-01
  • 浅谈C++的浅拷贝出现的错误

    浅谈C++的浅拷贝出现的错误

    下面小编就为大家带来一篇浅谈C++的浅拷贝出现的错误。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言实现BST二叉排序树的基本操作

    C语言实现BST二叉排序树的基本操作

    这篇文章主要为大家详细介绍了C语言实现BST二叉排序树的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C/C++利用栈和队列实现停车场管理系统

    C/C++利用栈和队列实现停车场管理系统

    数据结构的课程设计一般都不是很好理解,今天小编为大家总结了一下c和c++版本的常见栈和队列的的停车场管理程序,需要的小伙伴可以参考一下
    2022-06-06
  • OpenCV实现轮廓检测与绘制

    OpenCV实现轮廓检测与绘制

    这篇文章主要为大家详细介绍了OpenCV实现轮廓检测与绘制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • makefile如何调用静态库的方法实现

    makefile如何调用静态库的方法实现

    这篇文章主要介绍了makefile如何调用静态库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C++抽奖程序实现方法

    C++抽奖程序实现方法

    这篇文章主要介绍了C++抽奖程序实现方法,实例分析了C++随机数的生成技巧与抽奖程序的实现方法,需要的朋友可以参考下
    2015-07-07

最新评论