gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:36:25 24 4
gpt4 key购买 nike

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

主窗口.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();

计算.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); });

关于c++ - QT - 现有插槽在 mainwidow.cpp 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095743/

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