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.

    顺序 选择 循环 总结

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/Braveliu/p/7079166.html
Copyright © 2011-2022 走看看