qt出现多重定义问题
本人小菜一个最近学qt,用qt creator,出现一个问题头文件内容:
#ifndef TEST_H
#define TEST_H
#include<iostream>
#include<QApplication>
class Test :public QObject
{
Q_OBJECT
public: void setValue(int newvalue);
public slots: void show();
signals: void valuechange();
private : int value;
};
void Test::setValue(int newvalue) //有这条说我重定义,删了又说没有定义……而且第一次定义是在qglobal.h里面
{
value = 7;
emit valuechange();
}
void Test::show() //同上,不过第一次定义指的是这里……我晕了
{
std::cout<<"Connected succeed.\n Value changed " + value<<std::endl;
}
#endif // TEST_H
cpp内容:
--------------------编程问答-------------------- --------------------编程问答-------------------- 自己写的函数不要采用和qt相同的命名方式,换个函数名就行了,不然你有可能重载了一些重要的函数。 --------------------编程问答-------------------- --------------------编程问答-------------------- 继承自QObject,那么要把函数定义放在.cpp文件里,不能放在.h文件里,因为,另外你的main函数也需要改下
#include<Test.h>
int main()
{
Test t;
QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
t.setValue(7);
return 0;
}
#include <mainwindow.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Test t;
QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
t.setValue(7);
return a.exec();
}
至于为什么 楼下的大牛解释吧 我解释不清楚 --------------------编程问答-------------------- 给你贴一下改了的代码吧
Test.h:
#ifndef TEST_H
#define TEST_H
#include<iostream>
#include<QApplication>
class Test :public QObject
{
Q_OBJECT
public:
void setValue(int newvalue);
public slots:
void show();
signals:
void valuechange();
private :
int value;
};
#endif // TEST_H
Test.cpp:
#include <Test.h>
void Test::setValue(int newvalue) //有这条说我重定义,删了又说没有定义……而且第一次定义是在qglobal.h里面
{
value = 7;
emit valuechange();
}
void Test::show() //同上,不过第一次定义指的是这里……我晕了
{
std::cout<<"Connected succeed.\n Value changed " + value<<std::endl;
}
main.cpp:
#include <Test.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Test t;
QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
t.setValue(7);
return a.exec();
}
把函数放在cpp文件中,是因为牵扯到moc_*.cpp文件的生成…… --------------------编程问答--------------------
顶楼上的
只要用到了Q_OBJECT
类的声明(.h)和实现(.cpp)就要分开来写。
要不然MOC没法工作。
补充:移动开发 , Qt