美文网首页
QT connect lambda表达式注意事项

QT connect lambda表达式注意事项

作者: 雯饰太一 | 来源:发表于2023-06-18 07:47 被阅读0次
    //参数不匹配[失败]
    QPushButton* btn;
    connect(btn,&QPushButton::clicked,this,[](GTMap* pMap){
            printf("can compile.");
        });
    //隐式类型转换[通过]
    QPushButton* btn;
        connect(btn,&QPushButton::clicked,this,[](int a){
            printf("can compile.");
        });
    
    // 参数个数太多[失败]
    QPushButton* btn;
        connect(btn,&QPushButton::clicked,this,[](int a, int b){
            printf("can compile.");
        });
    
    • 槽函数的参数个数小于等于信号的参数个数

    • 信号里面的参数将会传递给槽函数或者lambda表达式

    • 如果lambda表达式中的参数列表对应不上,将产生以下错误

      • c:\qt\gtqt\include\qtcore\qobject.h(331): error C2338: Signal and slot arguments are not compatible.
        1>          UITBBinder.cpp(47): 参见对正在编译的函数 模板 实例化“QMetaObject::Connection QObject::connect<void(__thiscall QAbstractButton::* )(bool),`anonymous-namespace'::<lambda2>>(const QAbstractButton *,Func1,const QObject *,Func2,Qt::ConnectionType)”的引用
        1>          with
        1>          [
        1>              Func1=void (__thiscall QAbstractButton::* )(bool),
        1>              Func2=`anonymous-namespace'::<lambda2>
        1>          ]
        1>
        1>Build FAILED.
        

    具有重载特性的槽函数,connect写法

    QDoubleSpinBox * pBox;//这一行不能直接复制,需要处理
    connect(pBox,static_cast<void(QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),this,[=](double value)
        {
            //处理逻辑
        });
    //or 5.7开始可以使用QOverload宏写重载,这种写法更像符合语言描述的习惯
    connect(doubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),[=](double d)
        { 
            //处理逻辑    
        });
    

    lambda表达式的使用

    相关链接:

    相关文章

      网友评论

          本文标题:QT connect lambda表达式注意事项

          本文链接:https://www.haomeiwen.com/subject/ypmredtx.html