当前位置:网站首页>QT(42)-QT线程-线程调用槽函数
QT(42)-QT线程-线程调用槽函数
2022-08-04 20:03:00 【多云的夏天】
如果用主程序调用槽函数可能会造成阻塞,特别是槽函数运行需时比较长的情况下。这时用线程来运行槽函数比较合适。
1.主线程:
不要指定父对象。
1.创建一个槽函数的类 SlotObject
2. 主函数直接调用它
3.线程里调用它
1.创建一个槽函数的类 SlotObject
#ifndef SLOTOBJECT_H
#define SLOTOBJECT_H
#include <QObject>
class SlotObject:public QObject
{
Q_OBJECT
public:
explicit SlotObject(QObject *parent=0);
signals:
void sigNum(int num);
public slots:
void startCount();
};
#endifSlotObject.cpp
//1.没有线程的版本
#include "SlotObject.h"
SlotObject::SlotObject(QObject *parent):
QObject(parent)
{
int i=0;
for(i=1;i<=5;i++)
{
emit sigNum(i);
sleep(1);
}
}
2. 主函数直接调用它
mainwindow.cpp 点击按钮后执行槽函数。
#include "ui_MainWindow.h"
#include <QThread>
MainWindow::MainWindow(QWidget *parent):
QWidget(parent),
ui(new Ui:: MainWindow)
{
ui->setupUi(this);
slotObj= new SlotObject(this); //this
QObject::connect(slotObj,SIGNAL(sigNum(int)),
this,SLOT(onSigNum(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
//3.响应
MainWindow::onSigNum(int n)
{
ui->te_show->append(QString::number(n));
}
//1.按下按钮时
MainWindow::on_btn_start_clicked()
{
//2.slotObj发送信号
slotObj->startCount(); //阻塞在这
}mainwindow.h
#ifndef SLOTOBJECT_H
#define SLOTOBJECT_H
#include <QObject>
class MainWindow:public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent=0);
~ MainWindow();
private slots:
void onSigNum(int num);
void on_btn_start_clicked();
private:
Ui::MainWindow *ui;
SlotObject *slotObj;
};
#endif3.线程执行这个槽函数
mainwindow.cpp
#include "ui_MainWindow.h"
#include <QThread>
MainWindow::MainWindow(QWidget *parent):
QWidget(parent),
ui(new Ui:: MainWindow)
{
ui->setupUi(this);
slotObj= new SlotObject(); //1.创建对象 不能指定父对象
QThread *thread = new QThread(this); //2.创建QThread
slotObj->moveToThread(thread); //3.对象移到线程中去
QObject::connect(slotObj,SIGNAL(sigNum(int)),
this,SLOT(onSigNum(int)));
QObject::connect(ui->btn_start,SIGNAL(clicked()),
slotObj,SLOT(startCount()));
thread->start(); //4.启动线程
}
MainWindow::~MainWindow()
{
delete ui;
delete slotObj;
}
MainWindow::onSigNum(int n)
{
ui->te_show->append(QString::number(n));
}
边栏推荐
- Ant Group's time series database CeresDB is officially open source
- 如果是测试 axi dma抓数的话 看这里
- 使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
- 常用正则表达式[通俗易懂]
- 成品升级程序
- win10 uwp 修改图片质量压缩图片
- JSD-2204-酷莎商城(管理员模块)-密码加密-Day10
- awk statistical difference record
- Go study notes (Part 1) Configuring the Go development environment
- zynq records
猜你喜欢

阿里的arthas使用,入门报错:Unable to attach to 32-bit process running under WOW64

电脑一键重装系统后连不上远程了?教你设置的方法

使用.NET简单实现一个Redis的高性能克隆版(二)

Seata source code analysis: various message processing processes of seata server

前3名突然变了,揭秘 7 月编程语言最新排行榜

The list of Kubernetes - watch mechanism

Chrome安装zotero connector 插件

win10终端中如何切换磁盘

2022年国内手机满意度榜单:华为稳坐国产品牌第一

面试官:索引为什么会失效?
随机推荐
EasyUi常用代码
蚂蚁集团时序数据库CeresDB正式开源
QT 小知识随记
In July 2022, domestic database memorabilia
微信小程序云开发 | 赠、删、改城市名称信息的应用实现
如果是测试 axi dma抓数的话 看这里
Differences in the working mechanism between SAP E-commerce Cloud Accelerator and Spartacus UI
C#弹出询问对话框
mysql的存储过程介绍、创建、案例、删除、查看「建议收藏」
How to promote the implementation of rural revitalization
SQL Server 遇到报错解决办法--更新中
Finished product upgrade program
node 的运行命令
JS new一个构造器发生了什么?从零手写一个new方法
Desthiobiotin-PEG4-Azide_脱硫生物素-叠氮化物 100mg
电脑一键重装系统内存完整性无法打开怎么办
Latex分章节、分段落编译:input{}与include{}的区别
Embrace the Cmake child is simple and practical, but inflexible
If it is test axi dma catch a few words here
win10 uwp 修改图片质量压缩图片