QT - 现有插槽在主寡妇.cpp中不可见

QT - Existing slot is not visible from mainwidow.cpp

本文关键字:cpp 寡妇 插槽 QT      更新时间:2023-10-16

我需要做一些繁重的计算,所以我决定将其移动到工作线程以避免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);
};

虽然进度条连接完全可以正常工作,但对于qt创建者来说,connect( newThread, SIGNAL(started()), sender, SLOT(transfer(Va, Vb)));似乎是不可见的。它以错误结尾:

QObject::connect: 没有这样的插槽计算::transfer(Va, Vb) in ../my-directory/mainwindow.cpp

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

也许是这样的

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