gpt4 book ai didi

c++ - Qt C++ : static assertion failed: Signal and slot arguments are not compatible

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:24 42 4
gpt4 key购买 nike

我试图在用户单击按钮时在工作线程中启动倒数计时器。计时器开始倒计时的值取决于从我的 GUI 中选择的半径按钮。

我使用信号映射器将定时器的起始值作为参数传递。但是,在尝试编译我的代码时出现此错误:

 static assertion failed: Signal and slot arguments are not compatible

我的代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

connect(ui->btnTakeSnap, SIGNAL(clicked()), this, SLOT(startTimerWorker()) );

}

void MainWindow::startTimerWorker()
{
myThread = new QThread(this);
workerObj = new workerTimer();

QSignalMapper* signalMapper = new QSignalMapper (this) ;

connect(myThread, &QThread::started, signalMapper, SLOT(map()) );
if(ui->rdBtntimer1s->isChecked())
{signalMapper -> setMapping (myThread, 1000) ; }

if(ui->rdBtntimer3s->isChecked())
{signalMapper -> setMapping (myThread, 3000) ; }

if(ui->rdBtntimer5s->isChecked())
{signalMapper -> setMapping (myThread, 5000) ;}

connect(signalMapper, SIGNAL(mapped(int)), workerObj, SLOT(&workerTimer::countDown(int)));

workerObj->moveToThread(myThread);
myThread->start();

}


class workerTimer : public QObject
{
Q_OBJECT
public:
explicit workerTimer(QObject *parent = nullptr);

signals:

public slots:
void countDown(int selectedTimer);
};

有人可以解释一下我做错了什么吗?

谢谢

最佳答案

connect(myThread, &QThread::started, signalMapper, SLOT(map()) );

connect(signalMapper, SIGNAL(mapped(int)), workerObj, SLOT(&workerTimer::countDown(int)));

您混合了两种连接,使整个语句变得毫无意义。见 http://doc.qt.io/qt-5/signalsandslots.html

connect(myThread, SIGNAL(started()), signalMapper, SLOT(map()) );

connect(signalMapper, SIGNAL(mapped(int)), workerObj, SLOT(countDown(int)));

关于c++ - Qt C++ : static assertion failed: Signal and slot arguments are not compatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348861/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com