У меня есть MainWindow w
окна и TestThread testThread
в качестве члена w
.Я знаю это просто, но я не могу запустить метод testThread.foo()
в потоке testThread
(не в потоке окна).Другими словами: я не понимаю поведение QThread.
Пожалуйста, помогите исправить следующее тестовое приложение.Есть QProgressBar *MainWindow::ui::progressBar
и QPushButton *MainWindow::ui::startButton
(пиши просто).Я хочу начать (startButton
щелчок) TestThread::foo(int* progress)
, который будет увеличиваться int progress
каждую секунду.
MainWindow:
MainWindow::MainWindow(QWidget *parent) : // ...
{
// ...
ui->progressBar->setRange(0, 5);
progress = 0; // int MainWindow::progress
this->connect(ui->startButton, SIGNAL(clicked()), SLOT(startFoo()));
connect(this, SIGNAL(startFooSignal(int*)), &testThread, SLOT(foo(int*)));
// TestThread MainWindow::testThread
testThread.start();
}
// ...
void MainWindow::timerEvent(QTimerEvent *event)
{
ui->progressBar->setValue(progress);
}
void MainWindow::startFoo() // this is a MainWindow SLOT
{
startTimer(100);
emit startFooSignal(&progress);
// startFooSignal(int*) is a MainWindows SIGNAL
}
TestThread:
void TestThread::foo(int *progress) // this is a TestThread SLOT
{
for (unsigned i = 0; i < 5; ++i) {
sleep(1);
++*progress; // increment MainWindow::progress
}
}
Я знаю, это просто.Я делаю что-то не так:)
PS Я хочу запустить самый простой (насколько это возможно) пример, чтобы понять поведение QThread
.
Спасибо!