zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    javascript Date类的扩展
    软件工程师好了歌 (转)
    您可能不知道的.Net2.0小技巧
    您未必知道的Js技巧
    复活吧,架构师!
    技巧系列文章
    不要使用paddingtop控制内容开始的位置
    JQuery Offset实验与应用(转载)
    2008最佳Windows应用程序
    精选15个国外CSS框架
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/12163145.html
Copyright © 2011-2022 走看看