Добрый день! Подскажите пожалуйста, кто работал с QThread, каким образом сделать так, чтобы сигналы объекта обрабатывались пользовательским потоком, а не потоком графического интерфейса. Вот у Шлее есть 2 примера:
Первый:
#include <QtGui>
// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
int m_nValue;
public:
MyThread() : m_nValue(10)
{
}
void run()
{
QTimer timer;
connect(&timer, SIGNAL(timeout()), SLOT(slotNextValue()));
timer.start(1000);
exec();
}
signals:
void finished ( );
void currentValue(int);
public slots:
void slotNextValue()
{
emit currentValue(--m_nValue);
if (!m_nValue) {
emit finished();
}
}
};
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLCDNumber lcd;
MyThread thread;
QObject::connect(&thread, SIGNAL(currentValue(int)),
&lcd, SLOT(display(int))
);
QObject::connect(&thread, SIGNAL(finished()),
&app, SLOT(quit())
);
lcd.setSegmentStyle(QLCDNumber::Filled);
lcd.display(10);
lcd.resize(220, 90);
lcd.show();
thread.start();
return app.exec();
}
#include "main.moc"
Второй:
#include <QtGui>
// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
int m_nValue;
public:
MyThread() : m_nValue(10)
{
}
void run()
{
exec();
}
signals:
void finished ( );
void currentValue(int);
public slots:
void slotNextValue()
{
emit currentValue(--m_nValue);
if (!m_nValue) {
emit finished();
}
}
};
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLCDNumber lcd;
MyThread thread;
QObject::connect(&thread, SIGNAL(currentValue(int)),
&lcd, SLOT(display(int))
);
QObject::connect(&thread, SIGNAL(finished()),
&app, SLOT(quit())
);
QTimer timer;
QObject::connect(&timer, SIGNAL(timeout()), &thread, SLOT(slotNextValue()));
// timer.moveToThread(&thread);
timer.start(1000);
lcd.setSegmentStyle(QLCDNumber::Filled);
lcd.display(10);
lcd.resize(220, 90);
lcd.show();
thread.start();
return app.exec();
}
#include "main.moc"
Как сделать так, чтобы слот slotNextValue() обрабатывался потоком MyThread? В примерах этот слот обрабатывается главным потоком.
Есть еще функция moveToThread(), но с ней ничего вообще не получается, в слот не попадает ни один поток...