QQueue使用介绍

2023-10-27

QT的队列是类QQueue,它的原理其实就只是一个QList的结构,在继承QListj基础上封装了几个函数。

template <class T>
class QQueue : public QList<T>
{
public:
    // compiler-generated special member functions are fine!
    inline void swap(QQueue<T> &other) Q_DECL_NOTHROW { QList<T>::swap(other); } // prevent QList<->QQueue swaps
#ifndef Q_QDOC
    // bring in QList::swap(int, int). We cannot say using QList<T>::swap,
    // because we don't want to make swap(QList&) available.
    inline void swap(int i, int j) { QList<T>::swap(i, j); }
#endif
    inline void enqueue(const T &t) { QList<T>::append(t); }
    inline T dequeue() { return QList<T>::takeFirst(); }
    inline T &head() { return QList<T>::first(); }
    inline const T &head() const { return QList<T>::first(); }
};

swap(int i, int j)//表示自己的i位置和j位置的元素调换位置。
swap(QQueue &other)//表示跟其它队列调换位置。
常用函数:
inline void enqueue(const T &t)//入队
inline T dequeue() //出队。
下面来一个例子来看看,它的使用方法。

#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>
#include <QThread>
#include <QQueue>

struct mydata
{
    int id;
    QString data;
};

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void slottest();

private:
    QPushButton* m_btn;
};

class UThread : public QThread
{
public:
    UThread();

    void setExit(bool flag){m_isExit = flag;}
    void addQueueData(mydata& info);
    void run();

private:
    QQueue<mydata> m_queue;
    bool m_isExit;
};

#endif // WIDGET_H

#include "widget.h"
#include "unistd.h"
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{

    m_btn = new QPushButton(this);
    QVBoxLayout* lay = new QVBoxLayout(this);
    lay->addWidget(m_btn);
    setLayout(lay);
    connect(m_btn,SIGNAL(clicked()),this,SLOT(slottest()));
}

Widget::~Widget()
{
}

void Widget::slottest()
{
    UThread* thread = new UThread;
    thread->start();

    int i = 0;
    while (i < 30)
    {
        mydata info;
        info.id = i;
        info.data = "test";
        thread->addQueueData(info);
        i++;
    }
}


/*----------thread-----------*/
UThread::UThread()
{
    m_isExit = true;
}

void UThread::addQueueData(mydata &info)
{
    m_queue.enqueue(info);//入队
}

void UThread::run()
{
    while (m_isExit)
    {
        if (m_queue.size() > 0)
        {
            mydata info =  m_queue.dequeue();//出队
            int id = info.id;
            QString data = info.data;

            qWarning()<<"id:"<<id<<"data:"<<data<<m_queue.size();
        }
    }
}

打印结果:

id: 0 data: "test" 29
id: 1 data: "test" 28
id: 2 data: "test" 27
id: 3 data: "test" 26
id: 4 data: "test" 25
id: 5 data: "test" 24
id: 6 data: "test" 23
id: 7 data: "test" 22
id: 8 data: "test" 21
id: 9 data: "test" 20
id: 10 data: "test" 19
id: 11 data: "test" 18
id: 12 data: "test" 17
id: 13 data: "test" 16
id: 14 data: "test" 15
id: 15 data: "test" 14
id: 16 data: "test" 13
id: 17 data: "test" 12
id: 18 data: "test" 11
id: 19 data: "test" 10
id: 20 data: "test" 9
id: 21 data: "test" 8
id: 22 data: "test" 7
id: 23 data: "test" 6
id: 24 data: "test" 5
id: 25 data: "test" 4
id: 26 data: "test" 3
id: 27 data: "test" 2
id: 28 data: "test" 1
id: 29 data: "test" 0

从结果不难看出它的入队出队操作,先进先出,后进后出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QQueue使用介绍 的相关文章

随机推荐

  • ADB简介

    Google官方网页 https developer android com studio command line adb html hl zh cn 对ADB的介绍在国内经常打不开 为了便于查看 这里从此网页中摘录了些经常使用到的内容
  • 2021杭电多校第三场-Road Discount-wqs二分+最小生成树

    Description There are n cities in Byteland labeled by 1 to n The Transport Construction Authority of Byteland is plannin
  • getLocation:fail Coordinate address resolution failed -1501

    这表示在获取位置信息时出现错误 具体原因可能是坐标地址解析失败 错误代码 1501 表示这种情况 你可以尝试重新请求位置信息 或者检查你的设备是否能够访问位置信息 例如 确保位置服务已打开
  • java swing实现文件浏览器功能小程序

    闲来无事学习了一下java的桌面应用开发组件Swing 做了个小程序 文件浏览器 只能查看信息不能进行过多操作 文件功能 查看指定文件路径下的所有文件夹和文件 可查看文件夹和文件的详细信息 切换不同排列方式等 基本逻辑 设置列表布局 添加数
  • Android 13 - Media框架(3)- MediaPlayer生命周期

    上一节了解了MediaPlayer api的使用 这一节就我们将会了解MediaPlayer的生命周期与api使用细节 1 MediaPlayer生命周期 MediaPlayer java 一开始有对生命周期的描述 这里对这些内容进行翻译
  • 服务器e4系列,Intel Xeon E系列服务器处理器

    一 Intel Xeon E系列CPU 命名规则 首先 Intel E3 E5 E7代表了3个不同档次的至强CPU 这种命名方式类似桌面上的Core i3 i5 i7 分别对应好 更好 最好 其次 以E3 1220为例 E3 1220中的这
  • RAR Extractor Mac:可以提取所有大多数格式的压缩文件

    RAR Extractor是mac上的解压缩软件 可以提取所有大多数格式 超过50种格式 的压缩文件 支持RAR winmAIl dat ZIP 7z tbz sti tar xar lha lzh hqx bin bz2 bzip2 bz
  • 保存登录的用户名

    自动测试服务器中用到用户的登录问题 在servlet中写上 String username request getParameter username 创建一个session对象 HttpSession session request ge
  • java 新手入门电子书_java从入门到精通第6版电子书 PDF高清版

    java从入门到精通第6版电子书 PDF高清版由软吧下载编辑精心整理 java从入门到精通第6版pdf是在之前的版本上更加详细的书籍 对于想要快速了解java的的话 欢迎下载java从入门到精通第6版pdf哦 欢迎下载使用 如果您觉得本站还
  • Java 初始化 List 的几种方法

    最常见的初始化 List 方法为 List
  • Flink,HDFS,YARN,Zookeeper之中的概念

    无论如何都要看一手资料 能看官方文档就不要看别的博客 有些地方很误导人 Hadoop内部子项目 HDFS YARN都是内部集成的 Hadoop Common The common utilities that support the oth
  • Java线程池中的线程发生OOM会如何?

    环境 JDK1 8 线程池中如果发生OOM后会如何 线程池ThreadPoolExecutor当有线程发生了OOM 线程池会停止工作吗 public static void main String args ThreadPoolExecut
  • React中组件间过渡动画如何实现?

    一 是什么 在日常开发中 页面切换时的转场动画是比较基础的一个场景 当一个组件在显示与消失过程中存在过渡动画 可以很好的增加用户的体验 在react中实现过渡动画效果会有很多种选择 如react transition group react
  • 已解决:ORA-01114(临时表满了)

    记录 ORA 01114 将块写入文件 201 时出现 IO 错误 解决方法 创建一个中转的临时表空间TEMP2重新建立临时表TEMP 1 查询该用户下的默认临时表空间 SQL gt SELECT bytes 1024 1024 1024
  • 【面试系列】划分字母区间

    题意 原题链接 思路 由于每个字母只能被划分在一个区间内 所以我们可以考虑这个字母的区间范围 这样就得到了至多 26 26 26个字母的区间范围 所以有区间范围重叠的字母必须都被分到一个区间内 因此这个问题就转换为合并区间问题 排序后贪心合
  • 从零开始构建SSD网络实现目标识别项目

    前言 由于此项目全过程过于繁杂 我前后做了三四个月 无法把所有内容融入这一篇文章之中 所以本文以逻辑串联为主 记录了我从零开始 构建vgg 300网络 gt 构建 SSD模型 gt 数据标注 gt 训练以及训练模型保存 gt 恢复模型进行预
  • 衡量基因相对表达量的RPKM、FPKM、TPM详解

    衡量基因相对表达量的RPKM和FPKM 及TPM 1 RPKM Reads Per Kilobase per Million 和FPKM Fragments Per Kilobase per Million 1 引入 每一千碱基 per k
  • 编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12...

    定义变量ge shi bai 用于存放个位 十位 百位上的数字 int number 0 使用for循环 for number 200 number lt 300 number 取出百位数 int bai number 100 取出十位数
  • http 接口测试、 压力并发测试、自动化化测试

    Postman 可以在开发中用来调试验证http接口的正确性 JMeter 可以设置并发线程数进行Http接口的压力测试 RobotFramework 可以带逻辑的实现多个接口的自动化测试 RobotFramework入门 一 简要介绍及使
  • QQueue使用介绍

    QT的队列是类QQueue 它的原理其实就只是一个QList的结构 在继承QListj基础上封装了几个函数 template