Вот пример от Макса Шлее:
/* ======================================================================
** main.cpp
** ======================================================================
**
** ======================================================================
** Copyright (c) 2007 by Max Schlee
** ======================================================================
*/
#include <QtGui>
// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
int m_nValue;
public:
MyThread() : m_nValue(10)
{
}
void run()
{
QTimer timer;
//^^^^^^^^^^^
//а где будет эта переменная когда run() закончится
//а event loop будет продолжаться и тред должен будет
//дрыгать этим таймером раз в секунду?
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"
Вопрос в коментарии в функции run().
Прочитал у тогоже Шлее что в Qt
в основном передаются ссылки на объекты, а не копии объектов,
и что не надо объявлять статические объекты а надо new и давать им parent чтоб Qt с ними сам разобрался
не недо delete'ать объекты
что Qt ведет счет ссылкам на объект и убьет объект когда ссылки кончатся
Все эти умные(возможно мной не понятые) слова как бы говорят: «Не парься, делай как в примерах, память не потечет и ссылок в никуда не будет».
Но я старый Cшник, и хочу понять где будет жить локальная переменная
QTimer timer;
объявленная в функции run(), когда run() отработает а тред еще бежит.