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.

    顺序 选择 循环 总结

  • 相关阅读:
    OpenCV图像处理之 Mat 介绍
    linux 更改网卡名称 eth0
    【git】git常用命令
    【JS】函数提升变量提升以及函数声明和函数表达式的区别
    【VUE】vue中遍历数组和对象
    加密盐的意义和用途
    sql server2005版本中,len函数计算了字符串末尾的空格
    ES之一:API使用及常用概念
    flink (一)
    ClassLoader详解 (JDK9以前)
  • 原文地址:https://www.cnblogs.com/Braveliu/p/7079166.html
Copyright © 2011-2022 走看看