我自定义了一个多线程类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);
我非常困惑,大佬能否为我指点迷津,非常感谢🙏🙏🙏
1
NoOneNoBody 87 天前 1
qpushbutton clicked 发送一个 checked 的 bool 信号,默认 false ,button 可以 setcheckable
qthread start 参数是 0~7 的 int 信号,默认 7 ,QThread::Priority 看看是不是这个原因,我也不了解 QT C++,只写过 pyqt |
2
frayesshi1 87 天前
qthread::start 是有参数的,你的第三种方式是在同一个线程里面,可以不用 emit 参数
|