#include <qapplication.h>
#include <qpushbutton.h>
#include <qthread.h>
QWaitCondition mycond;
class Worker : public QPushButton, public QThread
{
Q_OBJECT
public:
Worker(QWidget *parent = 0, const char *name = 0) : QPushButton(parent, name)
{
setText("Start Working");
connect(this, SIGNAL(clicked()), SLOT(slotClicked()));
QThread::start();
}
public slots:
void slotClicked()
{
mycond.wakeOne();
}
protected:
void run()
{
while ( TRUE ) {
qApp->lock();
setCaption( "Waiting" );
qApp->unlock();
mycond.wait();
qApp->lock();
setCaption( "Working!" );
qApp->unlock();
// do_complicated_thing();
}
}
};
int main( int argc, char **argv )
{
QApplication app( argc, argv );
Worker firstworker( 0, "worker" );
app.setMainWidget( &firstworker );
firstworker.show();
return app.exec();
}
g++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/lib/qt-3.3/include -I.ui/ -I.moc/ -o .obj/qtthread.o qtthread.cpp
g++ -o qtthread .obj/qtthread.o -L/usr/lib/qt-3.3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
.obj/qtthread.o: In function `Worker':/test/qtthread/qtthread.cpp:86:对‘vtable for Worker’未定义的引用
:/test/qtthread/qtthread.cpp:86:对‘vtable for Worker’未定义的引用
:/test/qtthread/qtthread.cpp:86:对‘vtable for Worker’未定义的引用
.obj/qtthread.o: In function `~Worker':/test/qtthread/qtthread.cpp:82:对‘vtable for Worker’未定义的引用
:/test/qtthread/qtthread.cpp:82:对‘vtable for Worker’未定义的引用
.obj/qtthread.o:/test/qtthread/qtthread.cpp:82: more undefined references to `vtable for Worker' follow
collect2: ld 返回 1
make: *** [qtthread] 错误 1
[ 此贴被XChinux在2008-07-19 20:11重新编辑 ]