1、信号&槽 机制 即可

 ZC:个人暂时 测试下来,类似是 PostMessage(...)的方式:

  a、是在各自的线程中执行代码,

  b、调用 emit不耗时(指的意思是 像调用PostMessage(...)一样 扔完就算,具体 slot中需要执行多久 不关“emit ???()”的事)

2、测试代码:

 2.1、h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QThread> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow(); private slots: void slot01(); void on_pushButton_3_clicked(); private:
Ui::MainWindow *ui; int FiCnt;
public:
void UpdateCnt();
}; class TthreadZ :public QThread
{
Q_OBJECT
public:
explicit TthreadZ(QObject *parent = ){}
~TthreadZ(){} protected:
void run(); signals:
void signal01(); }; #endif // MAINWINDOW_H

 2.2、cpp

#include "mainwindow.h"
#include "ui_mainwindow.h" #include "UdpSocket_ClientZ.h" #include <QThread>
#include <Windows.h> MainWindow *g_pMainWindow = nullptr; void TthreadZ::run()
{
while ()
{
DWORD dwThreadId = ::GetCurrentThreadId(); DWORD dw1 = ::GetTickCount();
emit signal01();
DWORD dw2 = ::GetTickCount(); qDebug() << "TthreadZ.dwThreadId : " << dwThreadId << ". Take time : " << dw1 << " --> " << dw2 << " : " << (dw2-dw1)<<"ms"; // if (g_pMainWindow != nullptr)
// g_pMainWindow->UpdateCnt(); Sleep();
qDebug() << "";
}
} MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); g_pMainWindow = this;
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::slot01()
{
DWORD dwThreadId = ::GetCurrentThreadId(); DWORD dw1 = ::GetTickCount();
UpdateCnt();
DWORD dw2 = ::GetTickCount(); qDebug() << "MainWindow.dwThreadId : " << dwThreadId << ". Take time : " << dw1 << " --> " << dw2 << " : " << (dw2-dw1)<<"ms";
} void MainWindow::UpdateCnt()
{
FiCnt ++;
ui->plainTextEdit->appendPlainText(QString::number(FiCnt));
Sleep();
} void MainWindow::on_pushButton_3_clicked()
{
qDebug() << "on_pushButton_3_clicked(1)";
//UpdateCnt();
TthreadZ* p = new TthreadZ();
p->start(); qDebug() << "on_pushButton_3_clicked(2)";
connect(p, &TthreadZ::signal01, this, &MainWindow::slot01);// ZC: 注意这里的参数 函数指针
}

 2.3、界面

  

 2.4、控制台输出

on_pushButton_3_clicked(1)
on_pushButton_3_clicked(2)
TthreadZ.dwThreadId : 5344 . Take time : 3605015 --> 3605015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3605015 --> 3605515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3606015 --> 3606015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3606015 --> 3606515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3607015 --> 3607015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3607015 --> 3607515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3608015 --> 3608015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3608015 --> 3608531 : 516 ms TthreadZ.dwThreadId : 5344 . Take time : 3609015 --> 3609015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3609015 --> 3609531 : 516 ms

3、

4、

5、

线程.Qt更新界面的更多相关文章

  1. Android--Handler的用法:在子线程中更新界面

    本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...

  2. Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)

    最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁:Found one ...

  3. 使用Handler在子线程中更新UI

    Android规定仅仅能在主线程中更新UI.假设在子线程中更新UI 的话会提演示样例如以下错误:Only the original thread that created a view hierach ...

  4. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

    在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...

  5. qt动态更新界面的菜鸟代码,请指出

    qt简单界面更新代码(菜鸟级)(部分代码) self.timers_1=QtCore.QTimer(self) self.timers_1.timeout.connect(self.min_1) se ...

  6. qt简单界面更新代码(菜鸟级)(部分代码)

    qt简单界面更新代码(菜鸟级)(部分代码)self.timers_1=QtCore.QTimer(self)self.timers_1.timeout.connect(self.min_1)self. ...

  7. Qt UI界面改了,但UI界面不更新

    /**************************************************************************** * Qt UI界面改了,但UI界面不更新 * ...

  8. c#后台线程更新界面

    参考文章<C# 线程更新UI界面> 主窗口 public frmMain() { InitializeComponent(); } /// <summary> /// 主窗口加 ...

  9. Android app主线程UI更新间歇性崩溃的问题

    对App进行开发测试时,偶尔出现app崩溃的问题.日志如下: 10-25 18:44:52.935 15290-15290/com.zzq.cnblogs E/AndroidRuntime﹕ FATA ...

随机推荐

  1. 原生JS实现简易随机点名功能

    定时器的工作原理,这里将用引用How JavaScript Timers Work中的例子来解释定时器的工作原理,该图为一个简单版的原理图.· 上图中,左侧数字代表时间,单位毫秒:左侧文字代表某一个操 ...

  2. webservice的soap

    1.soap的定义: 2.使用TCP/IP Monitor监视Soap协议 eclipse工具,show view-->other-->debug-->TCP/IP Monitor ...

  3. filter方法求出列表所有奇数并构造新列

    a = [, , , , , , , , , ] b = filter(lambda x: x % != , a) for i in b: print(i)

  4. [bzoj 1010][HNOI 2008]玩具装箱

    传送门 Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号 ...

  5. 小程序wx.showLoading的使用

    比如说在用户点击登录的时候,为了防止用户点击点第二次,可以加一个loading,在请求结束之后就关闭

  6. Wireshark 序

    1. Foreword 前言 2. Who should read this document? 谁适合读该文档? 3. Acknowledgements 致谢 4. About this docum ...

  7. 微信小程序wx.request的简单封装

    前言 之前写小程序,每次请求后台时都直接调用原生的API,wx.request,每次都要写url,data,回调函数等,正好前段时间,小程序项目需要添加新内容,趁此机会,做一个封装的请求工具,比较简单 ...

  8. OpenVirtex安装

    目录 环境 安装 环境 我使用的java以及maven版本如下: jdk7下载地址:https://www.oracle.com/technetwork/java/javase/downloads/j ...

  9. T-MAX——项目需求分析

    这个作业属于哪个课程 2019秋福大软件工程实践Z班 这个作业要求在哪里 团队作业第二次-需求规格说明书 团队名称 T-MAX 这个作业的目标 撰写项目需求规格说明书,介绍团队分工 作业正文 T-MA ...

  10. php发现一个神奇的函数

    echo strtr('aaddffvvbbcc','avc','242'); //22ddff44bb22 echo '<br>'; echo str_replace('ad',22,' ...