QMetaObject::connectSlotsByName: No matching signal for问题的解决方法
今天發(fā)現(xiàn)qt程序在運行時命令行窗口會彈出下面的警告:
QMetaObject::connectSlotsByName: No matching signal for ...
但實際功能并沒有受影響。網(wǎng)上google了一圈,終于找到原因。
?
以下轉(zhuǎn)自:http://www.qtforum.org/article/20685/connectslotsbyname.html
After a bit of sleuthing to find the source of all the Qt warnings, “QMetaObject::connectSlotsByName: No matching signal for…”, in our log window/file, here’s what I’ve found.
setupUi calls connectSlotsByName. connectSlotsByName parses the moc_ file in order to connect slots and signals. The moc_ file contains a list of all the slots for the class. The parser iterates over the list of slot names looking for the following pattern: on_objectName_signal, where on_objectName_signal is the name of the slot, objectName is the object name and signal is the signal. For example, if you have a slot named, on_doneButton_clicked(), the parser looks for an object named doneButton, a signal named clicked and then connects the on_doneButton_clicked() slot to QButton’s signal clicked().
If you follow this naming convention, you do not need to call the connect() method, nor do you need to connect the signal via the Qt UI editor in VisualStudio. connectSlotsByName will automatically make the connection for you.
So, in order to get rid of the “No matching signal for…” warnings, we need to either follow this naming convention, or make sure none of our slot names begin with “on_”. If you have a slot, onDoneButton_clicked, for example, connectSlotsByName will no try to connect it with a signal, nor will emit an warning.
?
上面大概就是說:用VistalStudio里的QtEditer可以自動調(diào)用Qt中“connectSlotsByName”即“按空間名稱關(guān)聯(lián)槽”的方式進行關(guān)聯(lián),對應(yīng)的函數(shù)必須寫成“on_控件名_信號名”的格式;或者也可以通過connet函數(shù)人為顯式地將信號和槽關(guān)聯(lián)起來。但是,如果采用顯式connect的方法的同時,又將槽函數(shù)的名字起成了“on_控件名_信號名”的格式,那么就會在運行時彈出“QMetaObject::connectSlotsByName: No matching signal for”的警告了!
總結(jié)
以上是生活随笔為你收集整理的QMetaObject::connectSlotsByName: No matching signal for问题的解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我晕!查了好久好久,最后才发现原来ORA
- 下一篇: C2146和C4430错误:循环引用错误