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调用时都会触发.
我相信错误消息是由于声明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部分,以获得完整的解释,说明为什么需要这样做.
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |