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.

    顺序 选择 循环 总结

  • 相关阅读:
    Panorama和Pivot的区别
    Windows phone 全景视图
    在usercontrol里实现导航
    (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    Windows phone重写返回键
    Windows Phone 8弹窗
    Kotlin 区间的一些小注意
    Kotlin 区间和循环 Loop和Range
    Kotlin when 流程判断
    Kotlin 在kotlin内使用Java的一些注意(长篇)
  • 原文地址:https://www.cnblogs.com/Braveliu/p/7079166.html
Copyright © 2011-2022 走看看