当前位置:网站首页>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();
};
#endif
SlotObject.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;
};
#endif
3.线程执行这个槽函数
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));
}
边栏推荐
猜你喜欢
随机推荐
C语言——青蛙跳台阶(递归)
密码学系列之:PEM和PKCS7,PKCS8,PKCS12
基于Nodejs的电商管理平台的设计和实现
刷题-洛谷-P1179 数字统计
KubeSphere简介,功能介绍,优势,架构说明及应用场景
长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
前3名突然变了,揭秘 7 月编程语言最新排行榜
zynq records
【SQL】触发器同步表数据
取证程序分类
zynq 记录
5 g NR notes
How to promote the implementation of rural revitalization
多用户同时远程登录连接到一台服务器
【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
To -.-- -..- -
JSD-2204-酷莎商城(管理员模块)-密码加密-Day10
Red5搭建直播平台
getBoundingClientRect
Zip4j使用