一、继承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. [Html5]sessionStorage和localStorage常见操作

    摘要 [Html5]sessionStorage和localStorage的区别 索引 上篇文章简单介绍了它们的区别,已经常见的用法.那我们能通过. 或者类似dic[key]的方式访问吗?答案是当然可 ...

  2. Devexpress-1 DataGrid控件

    参考资料: 使用XtraGrid自定义列计算 DEV GridControl小结 实现对两列求和后作为新的列

  3. sql server 日期相关操作

    ), ): ), ): :57AM ), ): ), ): ), ): ), ): ), ): ), ): ), ): , ), ): :: ), ): :::827AM ), ): ), ): ), ...

  4. MFC中CString转化为char*

    char* convertCStringToChars(CString string) { int nLength=string.GetLength(); ]; memset(c,,nLength+) ...

  5. 将Centos的yum源更换为阿里云源

    阿里云Linux安装软件镜像源 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun. ...

  6. DEV控件Grid显示行号

    DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...

  7. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  8. 学习笔记:调用js文件冲突问题解决方案

    之前自己动手做了一个小网站,在实现过程中遇到了一个关于js文件调用冲突的问题. 具体问题描述如下:在index.html文件中引用了两个js文件,单独添加banner.js或者focus_pic.js ...

  9. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

  10. CSS3中动画属性transform、transition和animation

    Transform:变形 在网页设计中,CSS被习惯性的理解为擅长表现静态样式,动态的元素必须借助于javascript才可以实现,而CSS3的出现改变了这一思维方式.CSS3除了增加革命性的创新功能 ...