• QMetaObject::connectSlotsByName


    QMetaObject::connectSlotsByName

    [static] void QMetaObject::connectSlotsByName(QObject *object)

    Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:

    
    
      void on_<object name>_<signal name>(<signal parameters>);
    
    

    Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:

    
    
      void on_button1_clicked();
    
    

    If object itself has a properly set object name, its own signals are also connected to its respective slots.

    See also QObject::setObjectName().

    ---------------------------

    注意:

            connectSlotsByName 只会为以on_开头的槽去自动寻找一个对应的信号,如果不满足匹配条件,均会提示无法为槽寻找到正确的信号,对于非on_开头的槽,不会进行自动处理;大家需要知道的是,提示无法为槽寻找到正确信号,这并不代表你的代码有错误,只表示你定义了一个以on_开头的槽,但它的命名无法让系统为它自动匹配信号。你需要做的是,对于自定义并进行手动连接的槽,不要以on_开头即可。

    说明:

    1. 尽量不要让QObject出现相同objectName的情况
    2. 如果同名connectSlotsByName只能给其中一个建立缺省的信号和槽的连接
    3. 如果出现大量编码创建大量控件的情况,最好是自己去建立信号和槽的连接,而不是依赖connectSlotsByName来做到这个工作。connectSlotsByName更适合的任务是与desinger配合完成缺省的信号和槽的连接。

    其他:

    在测试过程中,曾经把ui->setupUi(this);放到了控件创建之前运行,结果运行时提示:

    QMetaObject::connectSlotsByName: No matching signal for on_TestButton_clicked

    从connectSlotsByName的代码可以看到这实际上执行的是第46行,如果在调试程序中遇到这样的信息,可以检查一下,是否是控件的objectName与你编写的槽里的objectName并不相符。

    ============== End

  • 相关阅读:
    python截取视频中的某一段,保存为avi结尾的视频
    文章内容过长,将此内容转为pdf的方式(使用node)
    typescript常见问题集锦
    利用matplotlib中imshow()函数绘图
    如何查看Linux系统安装时间
    php包含那点事情[WOOYUN]
    中间人攻击利用框架bettercap测试
    java 递归方法
    java方法重载
    JVM 之栈结构
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/12163145.html
Copyright © 2020-2023  润新知