前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >qOverload与qNonConstOverload

qOverload与qNonConstOverload

作者头像
Qt君
发布2020-04-15 12:37:11
1.1K0
发布2020-04-15 12:37:11
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

❝最近使用Qt5风格的信号槽,可是写起来太晦涩难看了,看了下Qt的API,原来可以简化的。❞

以连接QPushButton点击事件信号槽为例

  常规使用:

代码语言:javascript
复制
QPushButton *button = new QPushButton();
connect(button, /* 信号者(对象) */
        static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked), /* 信号 */
        [](bool checked) { /* lambda表达式,可以看成槽函数 */
            qDebug() << "1" << checked;
        });

  可以看出使用static_cast转换函数指针非常繁琐,我们不如使用qOverload试试看:

代码语言:javascript
复制
connect(button, /* 信号者(对象) */
        qOverload<bool>(&QPushButton::clicked), /* 信号 */
        [](bool checked) { /* lambda表达式,可以看成槽函数 */
            qDebug() << "2" << checked;
        });

  可以看出使用qOverload更简洁。

qOverload与qNonConstOverload

  qOverload返回指向(成员)函数的指针。

代码语言:javascript
复制
auto qOverload(T functionPointer)
  1. 「模板参数是函数的参数类型列表」
  2. 「functionPointer是指向(成员)函数的指针」

  qNonConstOverload与qOverload类似。区别在于它是「返回指向const(成员)函数指针」

代码语言:javascript
复制
auto qNonConstOverload(T memberFunctionPointer)

  例子:

代码语言:javascript
复制
struct Example {
    void function_1(bool, const QString &);
    void function_2(bool, const QString &) const;
};
qConstOverload<bool, const QString &>(&Example::function_1)
qNonConstOverload<bool, const QString &>(&Example::function_2)

  注意:「qOverload和qNonConstOverload只能在Qt 5.7版本以上使用」

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 以连接QPushButton点击事件信号槽为例
  • qOverload与qNonConstOverload
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档