当前位置:网站首页>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));
}
边栏推荐
猜你喜欢
随机推荐
How to promote the implementation of rural revitalization
【Attention 演变史】RNN的产生、架构、推广、问题(第一弹)
"WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!
visual studio 与 visual studio code
ASP.NET商贸进销存管理系统源码(带数据库文档)源码免费分享
拥抱Cmake小朋友 简单又实用,但是不灵活
A complete cross-compilation environment records the shell scripts generated by peta
KubeSphere简介,功能介绍,优势,架构说明及应用场景
六月 致 -.-- -..- -
泰山OFFICE技术讲座:底纹、高亮、边框的关系
《支付宝体验设计精髓》一书,跟测试相关性知识记录
awk statistical difference record
String中的hashcode缓存以及HashMap中String作key的好处
前3名突然变了,揭秘 7 月编程语言最新排行榜
如何找到某个 ABAP structure 某字段的源头来自哪个数据库表
实现菜单拖拽排序
关于 SAP 电商云 Spartacus UI SSR 的 state transfer 问题
Qt Designer生成的图形可以自适应窗口的大小变化
简单理解 JS 事件循环
QT 小知识随记