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.

    顺序 选择 循环 总结

  • 相关阅读:
    PHP MySQL 插入多条数据
    PHP MySQL 插入数据
    PHP MySQL 创建数据表
    PHP MySQL 创建数据库
    PHP 连接 MySQL
    PHP MySQL 简介
    PHP JSON
    12_短信发送器_发送短信实现
    11_短信发送器_快速回复页面实现
    10_短信发送器_获取电话号码
  • 原文地址:https://www.cnblogs.com/Braveliu/p/7079166.html
Copyright © 2011-2022 走看看