关于 QT 中通过信号与槽的方式启动子线程的问题。

1次阅读

共计 605 个字符,预计需要花费 2 分钟才能阅读完成。

我自定义了一个多线程类TimerThread:

   TimerThread* t_thread = new TimerThread();
   QThread* thread = new QThread();
   t_thread->moveToThread(thread);

我想通过界面上的一个按钮 ui->startThread 来启动子线程:

   connect(ui->startThread, &QPushButton::clicked, thread, &QThread::start);

但是程序报错:error: static assertion failed: Signal and slot arguments are not compatible.
但是我使用了另一种方法连接信号与槽,程序又能正常运行:

   connect(ui->startThread, &QPushButton::clicked, thread, [&](){thread->start();});

报错的意思是发送的信号参数与槽函数的参数没有对应。但是当我自己定义一个槽函数void testFun(int); ,并且,点击按钮时发出的信号所携带的参数同样与我自定义的槽函数的参数不能对应,但是程序却能正确运行。

   connect(ui->startThread, &QPushButton::clicked, this, &MainWindow::testFun);

我非常困惑,大佬能否为我指点迷津,非常感谢🙏🙏🙏

正文完
 0