kann es sein, dass man in einer von QObject abgeleiten Klasse keine Methoden implmentieren kann, die auf statische Attributen der Klasse zugreift bzw. diese zurückliefert?
Hier mein Beispielcode. In der Methode "QString getString()" tritt das Problem auf:
MyThread.h
Code: Alles auswählen
#ifndef MY_THREAD
#define MY_THREAD
#include <QtCore>
#include <QtGui>
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(){};
public:
virtual ~MyThread(void){};
void run();
static QString getString();
public slots:
void slot1(QString oString);
void emitSignal();
protected:
static QString m_oString;
signals:
void signal1(QString);
};
#endif
Code: Alles auswählen
#include "MyThread.h"
void MyThread::slot1(QString oString)
{
QThread *currentThread = QThread::currentThread();
qDebug() << "Slot executed by" << currentThread->objectName().toAscii().data();
}
void MyThread::run()
{
exec();
}
void MyThread::emitSignal()
{
emit signal1("Signal");
QThread *currentThread = QThread::currentThread();
qDebug() << "Signal emitted by" << currentThread->objectName().toAscii().data();
}
QString MyThread::getString()
{
return QString(m_oString);
}
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl -Wl,-subsystem,windows -o "debug\Sandbox.exe" debug\main.o debug\MyThread.o debug\SandboxImpl.o debug\moc_MyThread.o debug\moc_SandboxImpl.o -L"p:\Programming\SDK\Qt\4.3.0_ecl_static\lib" -lmingw32 -lqtmaind -lQtGuid -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
debug\MyThread.o(.text+0x5e2): In function `ZN8MyThread9getStringEv':
D:/Programming/Projects/eclipse/Sandbox/SourceFiles/MyThread.cpp:23: undefined reference to `MyThread::m_oString'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug\Sandbox.exe] Error 1
mingw32-make.exe[1]: Leaving directory `D:/Programming/Projects/eclipse/Sandbox'
P:\Programming\Tools\MinGW\bin\mingw32-make.exe: *** [debug] Error 2
Mache ich was falsch oder geht das aus irgendeinem Grund nicht?
Gruß M@g