2013-06-18 45 views
0
chip_definition/Isrc/NLBChipDefinitionEditor.C:20: error: no matching function for call to `nlb::gui::chip_definition::ChipDefinitionEditor::connect(QAction*, const char*, nlb::gui::chip_definition::ChipDefinitionEditor* const, const char*)' 

我可是从代码收到此错误:的QObject ::连接不匹配功能

qDebug() << dynamic_cast<QObject*>(this); 
    connect(m_engine->actionRegister().actionAt(nlb::gui::base::ACTION_ID_CONTEXT_REMOVE_CHIP), SIGNAL(triggered(bool)), this, SLOT(onRemoveSelectedChips())); 

错误指出this(ChipDefinitionEditor*)是当connect被注释掉不QObject*dynamic_cast蒙上确定。 ChipDefinitionEditor当然是从QObject派生出来的。这怎么会发生?

+0

你放在类声明ChipDefinitionEditor里面的Q_OBJECT宏? http://qt-project.org/doc/qt-4.8/qobject.html#Q_OBJECT –

+0

@CoryKlein是Q_OBJECT也写入 – Ashot

+0

如果你尝试'QObject * object = dynamic_cast (this)'然后连接到'object '?这至少可以让它起作用吗?当然,在这种情况下,你必须将它连接到一个通用的'QObject'信号。 –

回答

3

Qt预计参数connect的类型为QObject*。鉴于这种形式的错误:

no matching function for call to `connect(SOMETYPE*, const char*, 
              SOMEOTHERTYPE*, const char*)' 

编译器隐含指出它不具有指示SOMETYPESOMEOTHERTYPE是信息QObject给出什么已被列入该翻译单元。很多时候,只需包含SOMETYPE/SOMEOTHERTYPE的头文件就可以为编译器提供确定SOMETYPE/SOMEOTHERTYPEQObject继承的内容。在其他情况下(例如您的),您需要确保SOMETYPE/SOMEOTHERTYPE已被动态转换为QObject

还值得注意的是,当编译器有一种类型但没有足够的信息时,错误信息会稍微改变。例如,如果您修复错误SOMETYPE但不SOMEOTHERTYPE,错误消息稍有变化:

no matching function for call to `connect(QObject*, const char*, 
              SOMEOTHERTYPE*, const char*)'