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

23 天前
 h3xz

我自定义了一个多线程类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);

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

670 次点击
所在节点    Qt
2 条回复
NoOneNoBody
23 天前
qpushbutton clicked 发送一个 checked 的 bool 信号,默认 false ,button 可以 setcheckable
qthread start 参数是 0~7 的 int 信号,默认 7 ,QThread::Priority
看看是不是这个原因,我也不了解 QT C++,只写过 pyqt
frayesshi1
23 天前
qthread::start 是有参数的,你的第三种方式是在同一个线程里面,可以不用 emit 参数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1067855

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX