我有MainWindow w
窗户,并且TestThread testThread
是w
. 我知道这很简单,但我不能testThread.foo()
在线程中运行该方法testThread
(而不是在窗口线程中)。换句话说:我不理解 QThread 的行为。
请帮助更正下一个测试应用程序。有一个QProgressBar *MainWindow::ui::progressBar
and QPushButton *MainWindow::ui::startButton
(简单写)。我想开始(通过startButton
单击)TestThread::foo(int* progress)
,它将int progress
每秒递增。
主窗口:
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
}
测试线程:
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
行为。
谢谢!