zoukankan      html  css  js  c++  java
  • Qt5 信号重载

    下面以最常用的QComboBox为例说明。

    【1】Qt4风格的connect

    示例代码:

    1 connect(ui->comboBox, SIGNAL(activated(int index)), this, SLOT(onActivated(int nIndex)));

    观察Qt4风格,可知第二个参数即使信号重载,也不会出现歧义。

    【2】Qt5风格的connect

    示例代码:

    1 connect(ui->comboBox, &QComboBox::activated, this, &MyWidget::onActivated);

     但是,针对QComboBox对象,这样的信号槽连接,编译器会报编译错误:

    1     // error: C2664: “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”:
    2     // 无法将参数 2 从“overloaded-function”转换为“const char *”上下文不允许消除重载函数的歧义

    经查询分析,原因如下:

    1 Q_SIGNALS:
    2     void editTextChanged(const QString &);
    3     void activated(int index);
    4     void activated(const QString &);
    5     void highlighted(int index);
    6     void highlighted(const QString &);
    7     void currentIndexChanged(int index);
    8     void currentIndexChanged(const QString &);
    9     void currentTextChanged(const QString &);

     可知,因QComboBox的activated信号有重载实现导致。

    【3】Qt5风格信号重载的connect方式

    示例代码:

    1 // 两种正确方式:
    2 // 方式1:
    3 typedef void (QComboBox::*QComboIntSignal)(int);
    4 connect(ui->comboBox, static_cast<QComboIntSignal>(&QComboBox::activated), this, &MyWidget::onActivated);
    5 
    6 // 方式2:
    7 connect(ui->comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &MyWidget::onActivated);

     Qt助手范例:

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    响应式开发
    web作业小结
    js的简单数据类型和复杂数据类型
    JavaScript 字符串对象
    JavaScript 数组篇
    JavaScript 对象篇
    spfa优化
    HZNU Training 28 for Zhejiang Provincial Competition 2020
    [kuangbin带你飞]专题十一 网络流
    HZNU Training 26 for Zhejiang Provincial Competition 2020
  • 原文地址:https://www.cnblogs.com/Braveliu/p/7079166.html
Copyright © 2011-2022 走看看