一、继承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. C# 拷贝目录

    public class DirectoryExtends { /// <summary> /// 拷贝目录 /// </summary> /// <param name ...

  2. mysql 定义function rand

    MySQL获取随机数   如何通过MySQL在某个数据区间获取随机数? MySQL本身提供一个叫rand的函数,返回的v范围为0 <= v < 1.0. 介绍此函数的MySQL文档也介绍道 ...

  3. emlog在nginx中添加rewrite规则

    rewrite ^/(post|record|sort|author|page)-([-]+)\.html$ /index.php?$=$; rewrite ^/tag-(.+)\.html$ /in ...

  4. 同步和异步UDP使用方法

    同步和异步Socket的区别是,同步Socket会阻塞当前进程,而异步Socket则不会. 首先,一个最简单的同步UDP收发程序实例.可以看到,发送调用Send()函数之后,开始调用Receive接收 ...

  5. UML浅析

    UML概述 UML (Unified Modeling Language)为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程. UML模 ...

  6. 【GXZ的原创】C++小游戏——五子棋

    前些时候考完试自己编的带有胜负判定的五子棋. 操作方法:WSAD或↑↓←→移动下棋位置,Space或Enter放置. 如果游戏出现bug,欢迎大家在评论区反馈. #include <stdio. ...

  7. MAVEN for mac 安装

    http://blog.csdn.net/anialy/article/details/22217937 下载 maven  http://mirrors.hust.edu.cn/apache/mav ...

  8. JAVA-多屏幕显示

    以下代码适用于:一台主机连接多台显示器,JAVA Swing窗口需要分别显示到对应的显示器上. GraphicsEnvironment env = GraphicsEnvironment.getLoc ...

  9. angularjs表达式中的HTML内容,如何不转义,直接表现为html元素

    在模板中直接: 在ionic中直接使用: <p class="contentwen" ng-bind-html="detial.content">& ...

  10. [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)

    [BZOJ2656][codevs1207][Zjoi2012]数列(sequence) 试题描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者 ...