一、继承QThread 使用方法

1.创建个继承QThread的类。

#ifndef MYTHREAD_H
#define MYTHREAD_H #include <QObject>
#include<QThread>
#include<QtCore>
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = );
~MyThread(); public:
void run();
bool stop=false;
signals:
void NumberChanged(int number); }; #endif // MYTHREAD_H
#include "mythread.h"

MyThread::MyThread(QObject *parent)
{ } MyThread::~MyThread()
{ } void MyThread::run()
{
for(int i=;i<;i++)
{
QMutex mutex;
mutex.lock();
if(this->stop)
{
break;
}
else
{
mutex.unlock();
} emit NumberChanged(i);
this->msleep(); } }

2.调用代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<mythread.h>
namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow();
public:
MyThread *mThread; private:
Ui::MainWindow *ui; private slots:
void onNumberChanged(int number);
void on_btnStart_clicked();
void on_btnStop_clicked();
}; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); mThread=new MyThread(this);
QObject::connect(mThread,SIGNAL(NumberChanged(int)),this,SLOT(onNumberChanged(int))); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::onNumberChanged(int number)
{ ui->lblNumber->setText(QString::number(number));
} void MainWindow::on_btnStart_clicked()
{
mThread->start();
mThread->stop=false; } void MainWindow::on_btnStop_clicked()
{
//mThread->stop=true; mThread->stop=true; }

二、 moveToThread 使用方法

#ifndef MYOBJECT_H
#define MYOBJECT_H #include <QObject>
#include<QDebug>
#include<QThread>
#include<QLabel> class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = );
~MyObject(); signals: public slots:
void Thread1();
void Thread2(QLabel *lbl);
void Thread3(); }; #endif // MYOBJECT_H
#include "myobject.h"

MyObject::MyObject(QObject *parent) : QObject(parent)
{ } MyObject::~MyObject()
{ } void MyObject::Thread1()
{ qDebug()<<QThread::currentThreadId();
}
void MyObject::Thread2(QLabel *lbl)
{ for(int i=;i<;i++)
{}
lbl->setText("aaaaa");
qDebug()<<QThread::currentThreadId();
}
void MyObject::Thread3()
{
qDebug()<<QThread::currentThreadId();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<myobject.h> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); private slots:
void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); void on_pushButton_4_clicked(); private:
Ui::MainWindow *ui; public:
MyObject *myobj; }; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); myobj=new MyObject;
QThread *mythread=new QThread;
myobj->moveToThread(mythread);
mythread->start(); connect(mythread,SIGNAL(started()),myobj,SLOT(Thread1())); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{
myobj->Thread1(); } void MainWindow::on_pushButton_2_clicked()
{ myobj->Thread2(ui->label);
} void MainWindow::on_pushButton_3_clicked()
{
myobj->Thread3(); } void MainWindow::on_pushButton_4_clicked()
{
qDebug()<<QThread::currentThreadId();
}

Qt QThread 多线程使用的更多相关文章

  1. QThread多线程编程经典案例分析

    传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...

  2. QThread多线程编程经典案例分析(三种方法,解释了为什么使用moveToThread的根本原因,即为了避免调用QThread::exec() )

    传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...

  3. Qt搭建多线程Server

    起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...

  4. qt中多线程用法总结

    1.多线程的理解 在操作系统中线程和进程划分. 操作系统可以同时执行多个任务,每个任务就是进程:进程可以同时执行多个任务,每个任务就是线程. 线程之间相互独立,抢占式执行.对于单核CPU来说同一时刻只 ...

  5. 基于QT的多线程server

    // thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...

  6. Pyqt Smtplib实现Qthread多线程发送邮件

    一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接 ...

  7. Qt之多线程

    源地址:http://blog.csdn.net/liuhongwei123888/article/details/6072320 Qt 是一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造 ...

  8. Qt在多线程中使用信号槽的示例

    之前对线程理解得不深入,所以对Qt的线程机制没有搞清楚,今天写一篇文章总结一下,如有错误,欢迎指出. 首先需要理解线程是什么,线程在代码中的表现其实就是一个函数,只不过这个函数和主线程的函数同时运行, ...

  9. Qt中多线程问题

    1. 出现的问题 编写视频解码器程序时,把解码那部分单独置于一个线程中进行处理,后来实际应用到项目中发现内存泄漏很严重 问题就出现在多线程中,每次视频解码器程序关闭时首先必须释放其所涉及的堆空间, 由 ...

随机推荐

  1. mysql 如何用一条SQL将一张表里的数据插入到另一张表 3个例子

    1. 表结构完全一样 insert into 表1 select * from 表2  2. 表结构不一样(这种情况下得指定列名) insert into 表1 (列名1,列名2,列名3) selec ...

  2. [工具]Swagger-api接口文档描述

    摘要 工作中经常的用到webapi,之前都是提供的使用postman模拟请求的截图,非常的不方便,如果能在项目中集成一个在线查看接口说明的地方,肯定更方便更直观.在网上看到swagger这个组件,界面 ...

  3. asp.net mvc 实现博客的时间分类管理

    先看效果 这个其实用c#实现起来比较简单: Sides = bllSession.IArticleBLL.GetList("") .Select(a => a.Time) . ...

  4. 计划安装SQL Server2012需求详细

    1.查看 SQL Server2012 安装的安装要求.系统配置检查和安全注意事项. 1.1 硬件要求 [参考资料http://msdn.microsoft.com/zh-cn/library/ms1 ...

  5. R语言练习(一)

    b = seq(from=0, to=1, by=0.001) #一次方 l1 = function(b){ b^1 } y1 = l1(b) #二次方 l2 = function(b){ b^2 } ...

  6. HDOJ 4717 The Moving Points

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. 机器学习之Hash集合问题

    问题来源与七月学习之 (3.x线性代数与矩阵运算基础)

  8. 第26天 swift reflect

    1.reflect http://www.jianshu.com/p/b5c87824e33c 2.android studio 2.0项目1.5编译 Cause: com/android/build ...

  9. Inno Step 安装包程序 写INI配置文件脚本

    [INI]Filename: "{app}\Config\config.ini"; Section: "config";Key: "name" ...

  10. mysql 修改表结构

    alter table 表名 modify column 字段名 varchar(数量); 将varchar(50)改为255 alter table 表名 modify column 字段名 var ...