如何通过QThread自定义子线程来控制QT窗口控件
来源:互联网 发布:阿里云客服热线 编辑:程序博客网 时间:2024/05/16 23:51
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 MainWindow : public QMainWindow{public: MainWindow(); //调用此函数,进度条显示值+1 void bar_incr();}
MainWindow.cpp
//全局线程myThread *th;MainWindow::MainWindow(){ ui->setup(this); //以此MainWindow实例来构造一个新的线程 th = new myThread(this); th->start();}void Mainwindow::bar_incr(){ ui->ProgressBar->setValue(ui->ProgressBar->value()+1);}
**为什么要通过槽函数来操作窗口控件,而不是直接调用MainWindow的成员函数来操作控件?
在新定义的线程中调用其他线程的窗口刷新功能,会导致系统提示不安全而报错。
阅读全文
1 0
- 如何通过QThread自定义子线程来控制QT窗口控件
- qt线程类---QThread
- Qt线程QThread简析
- Qt线程(QThread)
- QT中的线程QThread
- Qt之线程QThread
- 在Qt中如何实现QThread线程同步QFtp
- QT自定义窗口以及控件
- InstallShield 自定义窗口控件控制
- java中一个子线程如何通过interrupt手段来停止另外一个子线程
- qt线程 qthread(转)
- QT——QThread线程
- Qt之线程(QThread)
- Qt之线程(QThread)
- QThread QT线程使用案例
- Qt之多线程QThread简介
- Qt::QThread->线程的使用
- Qt之线程(QThread)
- Ubuntu 17.04更换源
- Qt 语言国际化 语言家相关
- 寻找主元素
- Java小白起步_S1
- VMware Ubuntu安装详细过程
- 如何通过QThread自定义子线程来控制QT窗口控件
- python零碎知识(5)--对象
- 【华为机试】字符串最后一个单词的长度
- 如何使用思维导图做计划的6种模板类型
- 斐波那契数列的第N项 51Nod
- 把房子卖了,把工资发了 | 阿里的26组地铁广告,刺穿了无数创业者的心…
- 基于echarts3的大屏展示
- 设计模式-中介者模式
- [笔记分享] [Display] LCD类型介绍