gpt4 book ai didi

c++ - QObject::connect: 没有这样的信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:40 27 4
gpt4 key购买 nike

我需要知道我做错了什么。

我试着研究它,但我找不到任何与我的案例相关的东西。我是 QT 的新手,调试信号和插槽对我来说有点技术性。

我想做的很简单:创建一个线程,不断向我的 QProgressBar 发送信号小部件。

这是我的基本代码片段:

thread.h

class MyThread : public QThread
{

public:
MyThread(QWidget * parent = 0);


signals:
void valueChanged(int value);

protected:
void run();
};

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

MyThread * test = new MyThread(this);
connect(test,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));
test->start();
}

线程.cpp

MyThread::MyThread(QWidget * parent)
{

}




void MyThread::run(){

emit valueChanged(10); //for simplicity

}


void MyThread::valueChanged(int value){

}

我只有一个 progressBar在我的 UI 和我的 main 上与默认值相同。

无论如何,在运行代码时。我一直在得到这个 no such signal从我的线程类。我可以知道我做错了什么吗?我还想澄清一下我对 signals and slots 的理解是否正确用我自己的话来说:这意味着 slot每次 signal 都会被触发被称为。

最佳答案

我认为错误消息是由于 MyThread 声明顶部缺少 Q_OBJECT 宏造成的。 http://doc.qt.io/qt-5/signalsandslots.html 处的文档解释这对于任何想要声明信号和槽的类都是必要的。

将您的类定义更改为:

class MyThread : public QThread
{
Q_OBJECT

public:
MyThread(QWidget * parent = 0);

signals:
void valueChanged(int value);

protected:
void run();
};

查看链接的文档,特别是一个小示例部分,了解为什么需要这样做的完整解释。

关于c++ - QObject::connect: 没有这样的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796883/

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