QT开发中文网

在一个QWidget子类给线程发送信号

可以在 QWidget 的子类中定义一个槽函数,并通过信号与槽机制来给线程发送信号。下面是一个示例程序:

MyThread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class MyThread : public QThread {
    Q_OBJECT

signals:
    void mySignal(int value);

protected:
    void run() override;
};

#endif // MYTHREAD_H

MyThread.cpp

#include "MyThread.h"

void MyThread::run() {
    // 线程执行任务的代码...
}

MyWidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include "MyThread.h"

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget {
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

private slots:
    void on_myButton_clicked();
    
private:
    Ui::MyWidget *ui;
};

#endif // MYWIDGET_H

MyWidget.cpp

#include "MyWidget.h"
#include "ui_MyWidget.h"

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget) {
    
    ui->setupUi(this);
    
    MyThread *thread = new MyThread(this);
    
   // 将 widget 的信号连接到线程的槽函数上
   connect(this, SIGNAL(mySignal(int)), thread, SLOT(onMySignal(int)));
}

void MyWidget::on_myButton_clicked() {
   int value = 123;
   
   // 发射 widget 的信号,将数据传递给线程进行处理
   emit mySignal(value); 
}

在这个例子中,我们在 MyWidget 类中定义了一个名为 mySignal 的信号,并在主窗口类的槽函数 on_myButton_clicked() 中发射该信号,将数据传递给线程进行处理。然后在 MyWidget 类中连接该信号和线程的槽函数 onMySignal,当信号被发射时,会自动触发该槽函数并进行相应的处理。

注意:为了保证线程安全,我们使用了默认的连接模式(即 Qt::AutoConnection),这样可以让 Qt 根据当前执行环境来选择最合适的连接方式。另外需要注意,在信号和槽之间传递参数时要保证类型一致性。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1779

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?