本人刚学Qt,在信号与槽部分遇到问题,求大神解答
#include <QtCore/QCoreApplication>
#include <iostream>
using namespace std;
class Foo:public QObject
{
Q_OBJECT
public:
Foo();
int value() const
{
return val;
}
public slots:
void setValue(int);
signals:
void valueChange(int);
private:
int val;
};
Foo::Foo()
{
val=0;
}
void Foo::setValue(int v)
{
if(v!=val)
{
val=v;
emit valueChange(v);
}
}
int main(int argc, char *argv[])
{
QCoreApplication c(argc, argv);
Foo a,b;
QObject::connect(&a,SIGNAL(valueChange(int)),&b,SLOT(setValue(int)));
b.setValue(11);
a.setValue(79);
cout<<a.value();
return c.exec();
}
在VS2010中使用Qt4.8.5中出现以下错误:
已启动生成: 项目: signalAndSlot, 配置: Debug Win32 ------
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): warning MSB8017: 针对项“GeneratedFiles\Debug\main.moc”执行自定义生成命令时检测到了循环依赖项。这可能会导致增量生成无法正确运行。
1> Moc'ing main.cpp...
1> main.cpp
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Foo::metaObject(void)const " (?metaObject@Foo@@UBEPBUQMetaObject@@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall Foo::qt_metacast(char const *)" (?qt_metacast@Foo@@UAEPAXPBD@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall Foo::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Foo@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>main.obj : error LNK2019: 无法解析的外部符号 "protected: void __thiscall Foo::valueChange(int)" (?valueChange@Foo@@IAEXH@Z),该符号在函数 "public: void __thiscall Foo::setValue(int)" (?setValue@Foo@@QAEXH@Z) 中被引用
1>D:\QtProgram\signalAndSlot\Win32\Debug\\signalAndSlot.exe : fatal error LNK1120: 4 个无法解析的外部命令
------解决方案--------------------