QObject :: connect:没有这样的信号

Car*_*nta 1 c++ qt multithreading

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

我试过研究它,但我真的找不到任何与我的情况有关的东西.我是QT的新手,调试信号和插槽对我来说有点技术.

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

这是我的基本代码片段:

thread.h

class MyThread : public QThread
{

public:
    MyThread(QWidget * parent = 0);


signals:
    void valueChanged(int value);

protected:
    void run();
};
Run Code Online (Sandbox Code Playgroud)

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

thread.cpp

MyThread::MyThread(QWidget * parent)
{

}




void MyThread::run(){

emit valueChanged(10);  //for simplicity

}


void MyThread::valueChanged(int value){

}
Run Code Online (Sandbox Code Playgroud)

我的progressBarUI上只有一个,我main的默认值相同.

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

tro*_*per 7

我相信错误消息是由于声明Q_OBJECT顶部缺少宏MyThread.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();
};
Run Code Online (Sandbox Code Playgroud)

请查看链接的文档,特别是A Small Example部分,以获得完整的解释,说明为什么需要这样做.