Qt信号和槽的参数类型,const参考限定符是否重要?

yes*_*aaj 21 connection qt types arguments signals-slots

适用于以下类型的信号和插槽

signals:
    void textChanged(const QString &);

public slots:
    void setText(const QString & text)
Run Code Online (Sandbox Code Playgroud)

textChanged和setText的参数类型似乎无法使用const&.与仅使用QString相比,常量和参考资格是否有任何区别?

QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString)));
QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &)));
Run Code Online (Sandbox Code Playgroud)

编辑:当SIGNAL或SLOT中使用不兼容的类型时,我没有注意到输出窗口显示错误消息.我认为信号槽机制能够在编译时检测参数类型错误.

e8j*_*han 26

Qt检查标准化签名,意思是

规范化将空格减少到最小,在适当的位置将"const"移动到前面,从值类型中删除"const"并用值替换const引用.

  • 我讨厌人们指向我的源代码,但是从QMetaObject :: normalizedSignature函数开始,从那里开始工作.它包含了相当多的字符串解析状态,但是一旦你看到它就很简单了.你可以在这里阅读来源:http://qt.gitorious.org/qt/qt/blobs/master/src/corelib/kernel/qmetaobject.cpp.连接是使用QMetaObjects进行的,所以这就是所有魔法所在的地方. (2认同)