QT - 现有插槽在 mainwidow.cpp 中不可见

QT - Existing slot is not visible from mainwidow.cpp

我需要做一些繁重的计算,所以我决定将它移动到工作线程以避免 GUI 冻结。假设我有两个文件:mainwindow.cppcalc.cpp。两者都有头文件。一些用户输入是从 GUI 收集的,当用户按下按钮时,计算开始。这里有一个片段:

mainwindow.cpp

#include "calc.h"
Va = ui->lineEdit_Va->text().toDouble();
Vb = ui->lineEdit_Vb->text().toDouble();
//Progress bar definition
sender = new calc();
connect(sender, SIGNAL( inprogress(int) ), ui->progressBar, SLOT( setValue(int) ) );
//Calculation begins here
QThread* newThread = new QThread();
sender->moveToThread(newThread);
connect( newThread, SIGNAL(started()), sender, SLOT(transfer(Va, Vb)));
newThread->start();

calc.h

class calc : public QObject
{
    Q_OBJECT
public:
    calc(QObject *parent=0);
public slots:
    void transfer(double Va, double Vb);
signals:
    void inprogress(int progr);
};

虽然进度条连接工作得很好,但 connect( newThread, SIGNAL(started()), sender, SLOT(transfer(Va, Vb))); 对于 qt creator 似乎是不可见的。它以错误结尾:

QObject::connect: No such slot calc::transfer(Va, Vb) in ../my-directory/mainwindow.cpp

我认为它可能与旧的 moc 文件有关,但我尝试清理构建、更改工作目录,甚至手动删除 moc 文件,但没有任何改变。所以问题是,为什么这个插槽在 mainwindow.cpp 中是不可见的,尽管它被设置为 public?

大概是这样的:

connect(newThread, &QThread::started,
        [=]() { sender->transfer(Va, Vb); });