Q_OBJECT in cpp file
-
wrote on 20 Dec 2011, 03:05 last edited by
Hi
I have a problem with the macro Q_OBJECT. My source code:
@
// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H#include <QObject>
#include <QtCore>class MyClassPrivate;
class MyClass : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(MyClass)
public:
explicit MyClass(QObject *parent = 0);signals:
public slots:
private:
void* const d_ptr;
};#endif // MYCLASS_H
@
@
// myclass.cpp
#include "myclass.h"class MyClassPrivate: public QObject {
Q_OBJECT
public:
MyClassPrivate():QObject(NULL){}
signals:
public slots:
};MyClass::MyClass(QObject *parent) :
QObject(parent),
d_ptr(new MyClassPrivate())
{
}
@when compiling, I got error "undefined reference to `vtable for MyClassPrivate'". But if I comment the Q_OBJECT declaration inside MyClassPrivate then compilation successful. Could anyone tell me why? And what if I don't use Q_OBJECT in MyClassPrivate?
Thanks for help! -
wrote on 20 Dec 2011, 03:12 last edited by
You need to moc that .cpp as well. The usual trick is using a #include "myclass.moc" (or "moc_myclass.cpp") at the end of the .cpp, then rerun qmake. May I ask why do you need a private that inherits from QObject?
-
wrote on 20 Dec 2011, 03:53 last edited by
Thanks for quick help peppe! It worked. I would want to use signal/slot mechanism whatever it might be unnecessary :D, but I would want to try if sometime I want to use derivations of QObject inside cpp files.
-
wrote on 20 Dec 2011, 06:59 last edited by
What I usually do, it not moc the cpp file, but just create a myclass_p.h file.
-
wrote on 20 Dec 2011, 07:06 last edited by
yep, I used to do that
-
wrote on 1 Oct 2014, 11:41 last edited by
Sry, I have the same problem and I don't get it how to include the moc file. Could you give me a short example how to do it? Would be nice.
Edit:
Okay nevermind...I just have to include "moc_myclass.cpp". First I tried modul1g.moc and failed. I was wondering why the compiler didn't find moc_myclass.cpp, so I didn't try this.