目录

基本概念

代码与实例


基本概念

这里有个官方例子,如下:

  class WorkerThread : public QThread{Q_OBJECTvoid run() override {QString result;/* ... here is the expensive or blocking operation ... */emit resultReady(result);}signals:void resultReady(const QString &s);};void MyObject::startWorkInAThread(){WorkerThread *workerThread = new WorkerThread(this);connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);workerThread->start();}

从官方的例子中可以看到,在run里面emit,但是,如果要在run里面进行如果要new一个QTimer,这样就要启动事件exec(),不然信号会发不出的,如下:

void TransformThread::run()
{m_timeLine->start();QTimer *t = new QTimer;connect(t, SIGNAL(timeout()), this, SLOT(timeOutTest()));t->start(100);exec();
}

通过这样的代码就可以实现。

在QThread的构造函数中new()的对象,这个对象的创建在QThread被new的线程里面,

而在构造函数后面创建的对象,就在Thread中线程。

代码与实例

如下QThread代码

transformthread.h

#ifndef TRANSFORMTHREAD_H
#define TRANSFORMTHREAD_H#include <QThread>
#include <QList>QT_BEGIN_NAMESPACE
class QGraphicsItem;
class QTimeLine;
QT_END_NAMESPACEclass TransformThread : public QThread
{Q_OBJECT
public:TransformThread(QObject *object = nullptr);~TransformThread();void run();void addListItem(QGraphicsItem *item);void closeThread();public slots:void transformWay1(int value);void transformFinished();void timeOutTest();private:QList<QGraphicsItem*> m_list;bool m_isRun;QTimeLine *m_timeLine;bool m_newTime;
};#endif // TRANSFORMTHREAD_H

transformthread.cpp

#include "transformthread.h"
#include <QPointF>
#include <QTransform>
#include <QGraphicsItem>
#include <QPushButton>
#include <QTimeLine>
#include <QDebug>
#include <QTimer>TransformThread::TransformThread(QObject *object):QThread(object)
{m_isRun = true;m_newTime = true;m_timeLine = nullptr;
}TransformThread::~TransformThread()
{delete m_timeLine;
}void TransformThread::run()
{while(m_isRun){//qDebug() << "123456";if(m_newTime){m_timeLine = new QTimeLine(500);m_timeLine->setFrameRange(0, 500);qDebug() << "123";connect(m_timeLine, SIGNAL(frameChanged(int)), this, SLOT(transformWay1(int)), Qt::DirectConnection);connect(m_timeLine, SIGNAL(finished()), this, SLOT(transformFinished()), Qt::DirectConnection);m_newTime = false;m_timeLine->start();//QTimer *t = new QTimer;//connect(t, SIGNAL(timeout()), this, SLOT(timeOutTest()));//t->start(100);exec();}//QThread::sleep(1);}
}void TransformThread::addListItem(QGraphicsItem *item)
{m_list << item;
}void TransformThread::closeThread()
{m_isRun = false;
}void TransformThread::transformWay1(int value)
{qDebug() << "value: " << value;if(m_list.size() == 0)return;for(int i = 0; i < m_list.size(); i++){QPointF pt = m_list[i]->boundingRect().center();qreal angle = value / 2.0;QTransform transform;transform.translate(pt.x(), pt.y());transform.rotate(angle, Qt::XAxis);m_list[i]->setTransform(transform);}}void TransformThread::transformFinished()
{delete m_timeLine;m_newTime = true;
}void TransformThread::timeOutTest()
{qDebug() << "11111111111111";
}

Qt工作笔记-对QThread使用的进一步认识(exec及对象在哪个线程创建)相关推荐

  1. Qt工作笔记-对QObject::connect函数进一步认识(重载)

    今天看了某大佬的代码,发现了QObject::connect这个函数很有意思 他有6个构造函数,以前我都只用了一个,现在基本上又会了一个,在此做下笔记,以后如果要用到相关知识,本人就可以直接查阅了 运 ...

  2. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  3. Qt文档阅读笔记-Qt工作笔记-QThread解析与实例(主线程发送信号给子线程)

    目录 QThread 官方解析 博主栗子 子线程发射信号给主线程 QThread 官方解析 Detailed Description QThread类提供了跨平台的线程管理的API. QThread对 ...

  4. Qt工作笔记-qmake和uic(对Qt底层的进一步认识)

    目录 背景 以前的认识 今天的认识 背景 今天一大佬问了我个问题,就是uic程序编译ui生成.h文件后改怎么用! 当时我就有点蒙蔽了! 一般情况下来说,qmake会把ui文件生成.h文件,为什么会冒出 ...

  5. Qt工作笔记-对Qt工作线程的进一步理解

    运行截图如下: 运行的时候: 停止的时候: 现在一般都是这么搞的 用Qt的事件驱动,用QTime去搞,具体代码如下: widget.h #ifndef WIDGET_H #define WIDGET_ ...

  6. Qt工作笔记-对setupUi(this)进一步理解

    今天工作中,在构造函数中忘记了调用setupUi,使得程序中某些指针异常. 如下图的程序,当什么不做的时候,界面是这样的: 当把ui->setupUi(this)注释掉后 这里先看下setupU ...

  7. Qt工作笔记-undefined reference to `vtable for MyObject'及对moc文件的进一步理解

    源码如下: main.cpp #include <QApplication> #include <QObject> #include <QTextCodec>cla ...

  8. Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)

    关于虚函数的简单例子 首先是一个很简单例子,刚学C++的朋友都能理解 源码如下: #include <cstdio> #include <windows.h>static in ...

  9. Qt工作笔记-对QImage的进一步认识(关于α通道)

    一般的点阵图BMP图,是没有α通道的,如下图所示: 而在写OpenGL的程序时候,往往要得到图像的数据位的数据,不用框架,使用FILE很容易就可以获取图像的数据, 如下图: 但用框架将更为方便: 代码 ...

最新文章

  1. java从尾到头打印链表数据_Java编程实现从尾到头打印链表代码实例
  2. 一个接口查3张表数据_“离婚冷静期”倒计时,天眼查专业版数据显示我国目前有3万余家婚姻咨询相关企业 北京市最多...
  3. php 刷新iframe,js刷新iframe
  4. Java堆内存是线程共享的!面试官:你确定吗?
  5. python一行代码实现99乘法表_一行代码实现九九乘法表
  6. linux 补丁脚本,Linux上打patch补丁包脚本全解
  7. 用yum源配合源码包安装openresty、mariadb、php7服务
  8. 模板库 | 销售管理类报表,邀您提反馈
  9. 编程加速服务器_FPGA加速驱动新时代的数据洪流,下篇
  10. [Deepin - Pycharm] PyQT5安装配置
  11. @value 默认值为null_JAVA8之妙用Optional解决判断Null为空的问题
  12. 全网最全的Numpy开发入门教程(详细案例版)
  13. 【面向对象】可变对象和不可变对象
  14. Java内存管理(一)--内存分区
  15. volatile简记
  16. 使用Controller.UpdateModel方法来更新ViewModel
  17. boot客户管理系统环境的搭建_LANIF Admin开源免费后台管理系统(React)
  18. MATLAB均值滤波
  19. VMware中安装linux系统(可视化界面centOS 7)
  20. SSM实现毕业设计管理系统

热门文章

  1. TableLayoutPanel闪烁问题解决
  2. Java 知识总结大汇总!看完哪个都变大佬!
  3. 帆软与中国环境科学院合作,共同推进数字化管理建设
  4. 阿里宣布取消的周报又死灰复燃?3分钟的高效报表才是最后出路
  5. 【飞秋教程】查找/备份/还原
  6. 点讯输入法S60数字键通用版V6.0(官方签名正式版)
  7. 创业者的十大“必杀技”
  8. Python的主要8大应用领域,你还不会吗?
  9. 编程技术越来越被看中 编程到底是什么?赶紧看看!
  10. 面试官,再也别问我的系统如何支持高并发了