当前位置: 首页 > news >正文

12345东莞网站推广之家app下载

12345东莞网站,推广之家app下载,网站seo关键词布局,自己在线制作图片免费下载QT使用线程的两种方式 1.案例进度条 案例解析#xff1a; 如图由组件一个进度条和三个按钮组成#xff0c;当点击开始的时候进度条由0%到100%#xff0c;点击暂停#xff0c;进度条保持之前进度#xff0c;再次点击暂停变为继续#xff0c;点击停止按钮进度条停止。 案…QT使用线程的两种方式 1.案例进度条 案例解析 如图由组件一个进度条和三个按钮组成当点击开始的时候进度条由0%到100%点击暂停进度条保持之前进度再次点击暂停变为继续点击停止按钮进度条停止。 案例流程 1.创建qwidget工程 2.添加四个控件转到槽函数2.使用线程方式一 2.1创建一个类继承QThread重写run方法 2.2mythread.cpp #include mythread.h #include QDebug MyThread::MyThread() {} void MyThread::stop() {runningfalse; } //暂停继续 void MyThread::threadStop(bool flag) {pauseflag; } //重写run方法 void MyThread::run() {qDebug()线程id:currentThreadId();while (1) {//触发信号while(running){while (pause) {msleep(100);}if(value100)value0;emit valChage(value);msleep(100);}exit(0);} }2.3mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H #include QThread #include QDebug //继承QThread重写run方法 class MyThread : public QThread {Q_OBJECT public slots:void stop();void threadStop(bool flag); signals:void valChage(int); public:MyThread();void run(); private:int value0;bool runningtrue;bool pausefalse; };#endif // MYTHREAD_H 2.4widget.h #ifndef WIDGET_H #define WIDGET_H#include QWidget #include QProgressBar #includeQThread #include mythread.h namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent 0);~Widget(); signals:void stop();void threadStop(bool); private slots:void on_pushButton_clicked();void on_pushButton_3_clicked();void on_pushButton_2_clicked();private:Ui::Widget *ui;MyThread *mythread; }; #endif // WIDGET_H 2.5widget.cpp #include widget.h #include ui_widget.h Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui-setupUi(this);}Widget::~Widget() {delete ui; }void Widget::on_pushButton_clicked(){mythread new MyThread();//绑定信号与槽函数connect(mythread,MyThread::valChage,ui-progressBar,QProgressBar::setValue);//延时connect(mythread,MyThread::finished,mythread, QObject::deleteLater);connect(this,Widget::stop,mythread,MyThread::stop);connect(this,Widget::threadStop,mythread,MyThread::threadStop);mythread-start();ui-pushButton-setEnabled(false);}void Widget::on_pushButton_3_clicked() {emit stop(); } void Widget::on_pushButton_2_clicked() {static bool flagtrue;if(flag){emit threadStop(true);ui-pushButton_2-setText(继续);flagfalse;}else{emit threadStop(false);ui-pushButton_2-setText(暂停);flagtrue;} } 3.使用线程方式二 3.1创建类继承QObject 3.2qworker.h 这里的槽函数实现直接写在.h文件中不够规范只便与学习观看切不要效仿。 #ifndef QWORKER_H #define QWORKER_H #include QObject #include QThread #include QApplication class qworker : public QObject {Q_OBJECT public:explicit qworker(QObject *parent nullptr);signals:void dataChanged(int); public slots:void doWorking(){while (!sFlag) {if(current100)current0;while (pFlag) {QThread::msleep(10);//接收来自外部进程的事件否则收不到信号QApplication::processEvents();}emit dataChanged(current);QThread::msleep(10);QApplication::processEvents();}sFlagfalse;current0;}void pause(bool flag){pFlagflag;}void stop(){sFlagtrue;} private://进度条int current0;//暂停bool pFlagfalse;//停止bool sFlagfalse; }; #endif // QWORKER_H3.3widget.h #ifndef WIDGET_H #define WIDGET_H#include QWidget //引入qworker.h #include qworker.hnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent 0);~Widget(); signals:void working();void pause(bool);void stop(); private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked(); c private:Ui::Widget *ui;qworker *worker;QThread thread; }; #endif // WIDGET_H 3.4widget.cpp #include widget.h #include ui_widget.hWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui-setupUi(this);workernew qworker();//移动到线程中worker-moveToThread(thread);//开始connect(this,Widget::working,worker,qworker::doWorking);//暂停connect(this,Widget::pause,worker,qworker::pause);//停止connect(this,Widget::stop,worker,qworker::stop);connect(worker,qworker::dataChanged,ui-progressBar,QProgressBar::setValue);thread.start(); } Widget::~Widget() {delete ui; } void Widget::on_pushButton_clicked() {emit working(); }void Widget::on_pushButton_2_clicked() {static bool flagtrue;if(flag){emit pause(true);flagfalse;ui-pushButton_2-setText(继续);}else{emit pause(false);flagtrue;ui-pushButton_2-setText(暂停);} } void Widget::on_pushButton_3_clicked() {emit stop(); }4.总结 两种方式都可以完成案例需求 方式一 1.通过继承QThread类重写run方法 2.重写类MyThread的虚函数void run();即新建一个函数protected void run()然后对其进行定义。 3.在需要用到多线程的地方实例MyThread然后调用函数MyThread::start()后则开启一条线程自动运行函数run()。 4.当停止线程时调用MyThread::wait()函数等待线程结束并且回收线程资源。 方式二 1.继承QObject类创建对象。 2.通过moveToThread将派生类对象移动到一个线程中。 3.通过信号连接派生类的槽函数将耗时的工作放到这个槽函数中运行。 4.用信号QThread::finished绑定槽函数QThread::deleteLatater()在线程退出时自动销毁该线程和相关资源。 5.通过QThread的start()函数开启多线程。
http://www.zqtcl.cn/news/707790/

相关文章:

  • 网站点击率查询wordpress忘记后台账号
  • 网站怎么做全屏的网站建设报价比较表
  • 商城网站项目案例简单的明星个人网站建设论文
  • 腾讯云建网站如何利用谷歌云做自己的网站
  • 合肥网站搭建著名的网站建设公司
  • win7的iis怎么制作网站网页制作基础代码
  • 黄页网站大全免费网在线进一步优化供给推动消费平稳增长
  • dw中怎样做网站链接网页版qq登录入口账号密码
  • 外贸网站建设soho中国建设银行网站易方达消费
  • 淘宝客网站推广怎么做图文识别微信小程序是什么
  • 郑州网站建设、北京做网页公司
  • 代码错误网站wordpress主题屏蔽更新
  • 建五金方面的网站广告联盟app手机版
  • 宜宾建设网站公众号怎么制作流程
  • 上海崇明网站建设崇信县门户网站首页
  • 北京手机版建站系统开发学网页设计需要什么学历
  • 英文网站备案互联网排名前十的公司2021
  • 网站外部外链建设如何开发wordpress主题
  • 个人网站首页内容辽宁省建设网站
  • 二建证从住房建设厅网站调出流程需求分析 网站
  • 鞋子网站模板做网站开发学什么软件
  • 网站建设的需求客户中企动力科技股份有限公司招聘
  • 小程序定制 seo营销seo托管公司
  • 杭州网站设计公司联系亿企邦网站建设在电访销售话术
  • 安康网站开发公司报价网站开发人员考核
  • 谷歌网站 百度清苑住房和城乡建设局网站
  • 南宁世尊商贸网站建设如何查看一个网站是否备案
  • h5手机网站怎么做搜索引擎关键词怎么选
  • 弱电网站源码工程造价建设信息网站
  • 村级网站模板做公司永久免费网站什么好