2010-02-26 303 views
2

我已经为VS插件安装了Qt和Qt。一切工作正常,UI应用程序编译和运行没问题,但连接信号和插槽不。我有Q_OBJECT在我的课,以及用于连接我在构造函数中使用此代码:Visual Studio中的Qt:连接插槽和信号不起作用

connect(ui.mainTableView, SIGNAL(activated(const QModelIndex &)), 
     this, SLOT(showDetail(const QModelIndex &))); 

编辑:

showDetail方法:

void MyClass::showDetail(const QModelIndex &index) 
{ 
    this->setWindowTitle("it works"); 
} 

窗口标题不会改变,没有达到断点。

生成文件目录中生成moc文件,但该类的moc文件是空的(其他没有),我认为这是因为类没有信号,但只有一个插槽。

即使由Designer生成的连接不起作用,connect方法的调用返回true

+0

错误列表应该有所帮助。发表它。 – Mike 2010-02-26 11:57:09

+0

你应该发布你的结果作为答案,而不是问题的一部分。 – 2010-02-26 16:43:57

+0

Caleb Huitt - cjhuitt:done。 – Steve 2010-02-27 17:35:06

回答

0

结果:

哦,不,它原来是一个愚蠢的问题,谢谢大家,所有的答案把我推向了解决方案,但最后一步就是找出我的平台项目通过双击才能激活单击,而不是单个。对不起

2

你有没有moc正常工作?这可以解释为什么connect没有做它的事,但一切是...

+0

moc文件在'Generated Files'目录中生成,但该类的moc文件是空的(其他不是),我认为这是因为该类没有信号,但只有一个插槽。 – Steve 2010-02-26 12:16:03

+0

即使您的类是空的,moc_MyClass.cpp也不应该为空,您是否从'QObject'继承了'MyClass'? – Paul 2010-02-26 12:37:59

+0

是的,它从QMainWindow继承。 (这真的很奇怪。) – Steve 2010-02-26 12:42:18

3

SIGNALSLOT宏删除变量名:

connect(ui.mainTableView, SIGNAL(activated(const QModelIndex &)), 
    this, SLOT(showDetail(const QModelIndex &))); 

有关详细信息,请仔细阅读文件上QObject::connect

+0

这看起来对我来说是正确的答案。 – Skilldrick 2010-02-26 12:19:42

+0

不幸的是,它不适用于我:-( – Steve 2010-02-26 12:25:07

+0

您是否将'MyClass :: showDetail'标记为'MyClass'类定义中的插槽? – Paul 2010-02-26 12:32:28

0

在Visual Studio 2012,当试图使用

connect(plot->xAxis, SIGNAL(rangeChanged(QCPRange)), plot->xAxis2, SLOT(setRange(QCPRange))); 

我得到plotSIGNAL错误。

这是因为Visual Studio发现了不正确的连接。它在winsock.h中找到了connect

要解决这个错误,我用了QObject命名空间如下:

QObject::connect(plot->xAxis, SIGNAL(rangeChanged(QCPRange)), plot->xAxis2, SLOT(setRange(QCPRange))); 

仅供参考,这里是错误的信息。

对于第一plot参数中的错误是:

ERROR: argument of type "QCPAxis*" is incompatible with parameter of type "Socket". 

对于第一SIGNAL误差为:

ERROR: argument of type "cosnt Char*" is incompatible with parameter of type "const sockaddr*". 

对于第二plot参数中的错误是:

ERROR: argument of type "QCPAxis*" is incompatible with parameter of type "int". 

对于第二个SIGNAL t他的错误是:

ERROR: too many arguments in function call.