Qt C++:静态断言失败:信号和槽参数不兼容

6 c++ qt

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

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

 static assertion failed: Signal and slot arguments are not compatible
Run Code Online (Sandbox Code Playgroud)

我的代码:

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);
};
Run Code Online (Sandbox Code Playgroud)

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

谢谢

IlB*_*dus 4

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)));