我有一个主线程的图形用户界面,在其中运行是MainWindow
对象, 在其构造函数创建一个新的工作对象和QThread
对象和工人的我移动到线程,问题是,他们的打印ID时,它们是相同的:QThread的moveToThread不起作用
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
std::cout<<"MAIN_ID "<< QThread::currentThreadId()<<std::endl;
QThread *t_pc = new QThread;
worker *pc_w;
pc_w = new pc_worker();
pc_w->moveToThread(t_pc);
t_pc->start();
pc_w->initialize();
// ...
}
worker.cpp
worker::worker(QObject *parent) : QObject(parent) {
}
void worker::initialize() {
std::cout << "INITIALIZE " << QThread::currentThreadId() << std::endl;
}
我得到:
MAIN_ID 0x7f4009ccb780
INITIALIZE 0x7f4009ccb780
有什么不对?
但是,当通过连接SLOT/SIGNAL调用工人类时,打印的ID不同 –
当您直接调用函数时,它将在您调用它的线程中运行。 – thuga
将initialize()定义为插槽并从MainWindow发出信号。像这样连接它们:connect(this,SIGNAL(signal_initialize()),pc_w,SLOT(initialize()),Qt :: QueuedConnection); –