#ifndef MYTHREAD_H_
#define MYTHREAD_H_
#include <QtCore>
#include <QThread>
class myThread: public QThread {
public:
myThread();
~myThread();
public:
virtual void run();
signals:
void sigTest();
public slots:
void slotTest();
};
//myThread.cpp
#include "myThread.h"
myThread::myThread() {
connect(this, SIGNAL(sigTest()), this, SLOT(slotTest()));
}
myThread::~myThread() {
}
void myThread::run() {
emit sigTest();
}
void myThread::slotTest() {
}
//main.cpp
#include <QtCore>
#include <QApplication>
#include <QThread>
#include "myThread.h"
int main(int argc, char **argv) {
QApplication a(argc, argv);
myThread thread;
thread.start();
return a.exec();
}
我使用了上面三个文件测试一下QT的自定义信号,但是出现了如下问题:
1、error:myThread.cpp:17: undefined reference to `myThread::sigTest()'
2、如果在myThread.h里加上 Q_OBJECT,就会出现错误:
myThread.cpp:13: undefined reference to `vtable for myThread'
请问一下这种定义信号的方法对吗?应该如何定义?
第2个错误的原因是什么?
7 个解决方案
#1
#ifndef MYTHREAD_H_
#define MYTHREAD_H_
#include <QtCore>
#include <QThread>
class myThread: public QThread {
Q_OBJECT
public:
myThread();
myThread();
public:
virtual void run();
signals:
void sigTest();
public slots:
void slotTest();
};
#endif
#2
QT文档里说
Q_OBJECT
The Q_OBJECT macro must appear in the private section of a class definition
that declares its own signals and slots or that uses other services provided
by Qt's meta-object system.
#3
你好,我加了Q_OBJECT后就出现第二种错误:myThread.cpp:13: undefined reference to `vtable for myThread'
请问一些这是什么原因?是QT编译器的bug吗?
#4
class Server;
class Thread : public QThread
{
Q_OBJECT
public:
Thread(int iSocketDesc);
~Thread();
private:
Connection *m_pconn;
int m_isocket;
//QTcpSocket *m_pconn;
signals:
void started();
protected:
void run();
public slots:
void threadEnd();
/*void aaa();*/
};
#endif // THREAD_H
这个是我的代码,没有问题的
#5
你用qmake了吗,QT程序不是标准C++程序,
要经过MOC编译后,才能使用C++编译器编译。
除了第一段代码缺少Q_OBJECT和#endif之外,
没有别的语言上的错误了,我编译通过,也能执行。
要经过MOC编译后,才能使用C++编译器编译。
除了第一段代码缺少Q_OBJECT和#endif之外,
没有别的语言上的错误了,我编译通过,也能执行。
#6
谢谢谢谢,我已经解决了。
1、要添加Q_OBJECT;
2、出现undefined reference to `vtable for myThread' 的原因是由于信号命名发生冲突。
1、要添加Q_OBJECT;
2、出现undefined reference to `vtable for myThread' 的原因是由于信号命名发生冲突。
#7
添加Q_OBJECT;
修改同名的slots和signals;
重新运行qmake;
修改同名的slots和signals;
重新运行qmake;
#1
#ifndef MYTHREAD_H_
#define MYTHREAD_H_
#include <QtCore>
#include <QThread>
class myThread: public QThread {
Q_OBJECT
public:
myThread();
myThread();
public:
virtual void run();
signals:
void sigTest();
public slots:
void slotTest();
};
#endif
#2
QT文档里说
Q_OBJECT
The Q_OBJECT macro must appear in the private section of a class definition
that declares its own signals and slots or that uses other services provided
by Qt's meta-object system.
#3
你好,我加了Q_OBJECT后就出现第二种错误:myThread.cpp:13: undefined reference to `vtable for myThread'
请问一些这是什么原因?是QT编译器的bug吗?
#4
class Server;
class Thread : public QThread
{
Q_OBJECT
public:
Thread(int iSocketDesc);
~Thread();
private:
Connection *m_pconn;
int m_isocket;
//QTcpSocket *m_pconn;
signals:
void started();
protected:
void run();
public slots:
void threadEnd();
/*void aaa();*/
};
#endif // THREAD_H
这个是我的代码,没有问题的
#5
你用qmake了吗,QT程序不是标准C++程序,
要经过MOC编译后,才能使用C++编译器编译。
除了第一段代码缺少Q_OBJECT和#endif之外,
没有别的语言上的错误了,我编译通过,也能执行。
要经过MOC编译后,才能使用C++编译器编译。
除了第一段代码缺少Q_OBJECT和#endif之外,
没有别的语言上的错误了,我编译通过,也能执行。
#6
谢谢谢谢,我已经解决了。
1、要添加Q_OBJECT;
2、出现undefined reference to `vtable for myThread' 的原因是由于信号命名发生冲突。
1、要添加Q_OBJECT;
2、出现undefined reference to `vtable for myThread' 的原因是由于信号命名发生冲突。
#7
添加Q_OBJECT;
修改同名的slots和signals;
重新运行qmake;
修改同名的slots和signals;
重新运行qmake;