如何通过QThread自定义子线程来控制QT窗口控件

本文介绍了如何使用QThread创建自定义子线程,并通过信号槽机制安全地操作QT窗口控件。在自定义的线程类中,继承QThread并持有MainWindow指针,定义信号和槽函数。当线程运行时,发出信号,主线程的槽函数接收到信号后调用MainWindow的成员函数来更新控件,如ProgressBar。这种方式避免了直接在子线程中操作窗口控件导致的系统错误。
摘要由CSDN通过智能技术生成

1.添加一个自定义类,继承QThread类,在类中添加MainWindow类型的指针MainWindow *w

定义信号和槽函数,线程运行时发出信号,槽函数中调用MainWindow类内的控件操作函数。

myThread.h:

class myThread : public QThread{
public:
    myThread(MainWindow *win);

private:
    MainWindow *w;

signals:
    void bar_sig();

public slots:
    void bar_slot();

protected:
    void run();

}

myThread.cpp:

myThread::myThread(MainWindow *win){
    this->w = win;
    //连接信号和槽函数
    connect(this,SIGNAL(bar_sig()),this,SLOT(bar_slot()));
}

void myThread::run(){
    while(1){
        //发出信号,此时调用槽函数
        emit bar_sig();
        msleep(100);   
    }
}


void myThread::bar_slot(){
    //在槽函数中调用MainWindow类的控件操作函数
    w->bar_incr();
}

2.在MainWindow类中定义用于操作窗口内控件的函数,此处以操作ProgressBar为例

MainWindow.h:

class MainWindo
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值