qt中的多线程

1、dialog.h

#define DIALOG_H

#include <QDialog>
#include"mythread.h"
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
~Dialog();

private slots:
void on_pushButton_clicked();

private:
Ui::Dialog *ui;
Mythread *myp;//此处声明了一个继承与pthread的类mythread,相当于创建了一个线程。
};

#endif // DIALOG_H

2.dialog.cpp#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    myp = new Mythread(ui->label);
    myp->start();//自动执行mythread中的run()函数。相当于调用run函数
   // QThread aa;
   // aa.start();
}
3、mythread.h#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include<QLabel>
class Mythread : public QThread
{
public:
        Mythread(QLabel *l);

    protected:
        void run();//声明一个run函数,run为继承下来的一个虚函数
    private:
        QLabel *pp;
};
#endif // MYTHREAD_H
#include"mythread.h"
#include <QDebug>
Mythread::Mythread(QLabel *l)//构造函数初始化
{
   pp= l;

}
void Mythread::run()
{

    while(1)
   {
    qDebug()<<"test";
    sleep(1);
    pp->setText("22");
     sleep(1);
    pp->setText("33");
    }
}
时间: 2024-10-14 01:35:53

qt中的多线程的相关文章

Qt中的多线程编程

http://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/ Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能.为了满足用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编程支持.从 2.2 版本开始,Qt 主要从下面三个方面对多线程编程提供支持:一.构造了一些基本的与平台无关的线程类:二.提交用户自定义事件的 Thread-safe 方式:三.多种线程间同步机制,如信号量,全局锁.这些都给用户提供

(73课)Qt中的多线程编程(一)

一.Qt中通过QThread直接支持多线程 1.QThread是一个跨平台的多线程解决方案 2.QThread以简洁易用的方式实现多线程编程 注意:1.Qt中的线程以对象的形式被创建和使用 2.每一个线程对应着一个QThread对象 QThread这个类,是一个线程父类,我们需要继承这个QThread类. QThread类,提供了一组成员函数.一个线程是以一个对象的形式来表现出来,所以说,我们创建一个 线程的时候,实际上就是创建了一个这个QThread线程类的对象 一个线程对应一个QThread

第73课 Qt中的多线程编程

1. QThread类 (1)QThread是一个跨平台的多线程解决方案 (2)QThread以简洁易用的方式实现多线程编程 2. QThread中的关键成员函数 (1)virtual void run() :线程函数,用于定义线程功能(执行流). (2)void start():启动函数,将线程入口地址设置为run函数.启动线程,新线程开始执行run函数. (3)int exec():进入事件循环,直至调用exit().返回线程退出事件循环的返回码. (4)void terminate():强

【Qt学习笔记】8.Qt中的多线程

一.界面线程与工作线程 GUI程序的主线程: GUI的用户输入主要来自鼠标.键盘,称为事件. 处理事件的主循环,称为 事件循环. 这个用于处理各种界面的线程,称为 界面线程 GUI界面卡死 所有的事件处理函数(slots)都应该迅速返回,否则主界面会卡死 例如:鼠标点击一个按钮后,这个处理函数要尽快的返回.在它处理期间,界面是卡死的.(因为此函数处于事件循环中) 解决:把长时间的任务放到另一个线程(工作线程)中来完成,保持界面处于活动的状态. 二.定时器(Timer) 定时器用于实现定时操作,如

Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)

刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多线程上去解决,但是比较困难:后来只能从另外一条路来解决,那就是:当语音识别进行时:禁掉一切用户操作! 所谓的禁掉一切UI操作,在手机等手持设备上,尤其是纯触摸屏的设备上,主要就是指的禁止mouse操作!当然了:也可能是禁止键盘操作等.那如何去做这一点呢? 方法:我们可以截获禁止操作的窗口的所有eve

Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObject是所有Qt对象的基类,它提供了一个基本的定时器.通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符.这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObjec

用事件队列解决GUI的操作顺序问题(Qt中处理方法)

GUI操作顺序问题引发异常: 有时候我们使用写GUI程序的时候会遇到这样的问题:比如在程序中,建立了一个列表的GUI.这个列表是随着时间不断更新的,而且操作也会读取这个列表GUI的内容. 如果这个程序是多线程的程序,而且只是除了GUI的线程不操作,只是其他线程操作这个列表GUI,那么这个问题很简单,只用加互斥锁就可以了.但如果GUI线程自己本身也要操作这个列表,那么这个问题就很麻烦了. 我们可以很容易地想到一种场景,比如GUI线程读了列表的一些表项(比如选定),此时线程中的某个方法keep了这些

解析Qt中QThread使用方法

本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用google一搜,就能搜出大量结果出来.无怪乎Qt的开发人员 Bradley T. Hughes 声嘶力竭地喊you are-doing-it-wrong 和众多用户一样,初次看到这个时,感到 Bradley T. Hughes有 些莫名奇妙,小题大作.尽管不舒服,当时还是整理过一篇博客QThread 的使

Qt中两种定时器用法

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObject是所有Qt对象的基类,它提供了一个基本的定时器.通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符.这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObje