用Qt Label 生成矩阵阵列

  最近做的一个项目中需要用到视觉去检测产品,产品呈矩阵式排列,客户那边需要检测完一组产品后能够将检测结果以图形化的方式显示出来。

  emmm,这个似乎不难,只需要有类似于数组的东西就可以搞定,不过对于数组来说它并不能存像QLabel这样的类型,但是Qt它还是机制地提供了几种容器类来帮我们储存数据。Qt的容器类大概有以下几类:

  QList类(用得比较多的一种):QList、QLinkedList、QQueue

  QVector类(将数据存储在一段连续的内存空间里):QVector、QStack

  QMap类(字典式容器,将Key类型的值映射到 T类型的值上):QMap、QHash

在这里也没有什么复杂的操作,用最常用的QList就行了

  接下来要思考一下整个过程应该是怎样的呢?

  首先要定义这样一个函数,可以接收矩阵的行列值和检测每个单元的状态值,分别定义为row,col和status。接着要把所有的Label都给new一遍(废话,没有新label哪来的新zg,手动滑稽),因为生产的时候是有顺序的,每个单元都有它的序号,所以这些催巴儿得按大小个排好,然后给它们分配好状态值,最后再根据生产顺序进行矩阵排列。

  废话不多说,上代码

  

 1 QList<QLabel *> m_lstLabel;
 2
 3 void Result::showResult(int row, int col, bool status)
 4 {
 5     int count = row*col;
 6     for(int i = 0;i < count;i++)
 7     {
 8         QLabel *label = new QLabel;
 9         label->setParent(this);
10         label->setGeometry(320,170,30,50);
11         if(status == true)
12         {
13             label->setStyleSheet("background-color:rgb(0,255,0)");
14         }
15         else
16         {
17             label->setStyleSheet("background-color:rgb(255,0,0)");
18         }
19         m_lstLabel.append(label);
20     }
21
22     for(int j = 0;j < col;j++)
23     {
24         for(int k = 0;k < row;k++)
25         {
26             m_lstLabel.at(k+row*j)->move(320-40*j,170-60*k);
27         }
28     }
29 }

  这段代码还有一些需要修改的地方,比如status的值应该是一个数组的指针,这样才能有多个值传进来,还有矩阵的排列方式可有多种选择

  效果如下:

原文地址:https://www.cnblogs.com/rogeryu1024/p/9999365.html

时间: 2024-10-23 04:17:11

用Qt Label 生成矩阵阵列的相关文章

QT开发(十九)——QT内存泄漏问题

QT开发(十九)--QT内存泄漏问题 一.QT对象间的父子关系 QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children. QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针. 当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针. 当QT对象被销毁时,

从 Qt 的 delete 说开来

原地址:http://blog.csdn.net/dbzhang800/article/details/6300025 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大. Qt作为C++的库,显然是不会违背C++的前述原则的.可是: 在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?! 注:本文暂不涉及智能指针(smart pointer)相关的东西,你可以考虑 Qt

Qt delete & deletelater设计

在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大. Qt作为C++的库,显然是不会违背C++的前述原则的.可是: 在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?! 注:本文暂不涉及智能指针(smart pointer)相关的东西,你可以考虑 Qt 智能指针学习 一文 Qt半自动的内存管理 在Qt中,以下情况下你new出的对象你可以不用 亲自去delete (但你应

Qt Creater之hello world

下载Qt Creater,博主是Qt5.2.0版本: 15:17:16 打开界面,选择文件新项目, 文件名:hellodemo: 生成的文件有.pro时项目文件,包含项目的信息,mainwindow.h .cpp 是dialog类的文件,.ui时设计师设计的界面文件: 左下角有 waelkflwakfk选中绿色的三角进行编 QtCreater5.2.0首先设置系统环境变量,添加bin目录到PATH建立个工程运行,生成的项目可直接编译运行,如果需要发布,则需要添加个别DLL动态链接库,10-20M

Qt中内存泄露和退出崩溃的问题 delete

Qt中帮程序员做了一些内存回收的事情,但正因为这些反而让对此不熟悉的人会屡屡犯错. 收录一篇不错的文章: 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大. Qt作为C++的库,显然是不会违背C++的前述原则的.可是: 在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?! 注:本文暂不涉及智能指针(smart pointer)相关的东西,你可以考虑 Qt 智能指针学习

Qt 半内存管理

在C++中学习过程中,我们都知道: delete 和 new 必须配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大. Qt作为C++的库,显然是不会违背C++的前述原则的.可是: 在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?! 注:本文暂不涉及智能指针(smart pointer)相关的东西,你可以考虑 Qt 智能指针学习 一文 Qt半自动的内存管理 在Qt中,以下情况下你new出的对象你可以不用亲自去delete (但你应该清

Qt学习(6)

Qt学习(6)——Hello Qt 从最简单的 Qt 程序开始,自己动手用 g++ 编译 Qt 代码,并链接生成可执行程序. 接着示范一个稍微复杂点的 Qt 程序编译过程,包含对 moc 工具的使用,顺便提一下 Qt 元对象系统. 1.Hello Qt Qt 本身就是用 C++ 语言编写的,所以 Qt 程序的代码看起来和普通的 C++ 代码差不了多少,这样就很容易上手,也适合自学.C++ 的套路就编写一个类,使用的时候就定义该类的对象,然后调用对象的函数来完成任务.使用 Qt 控件就像上一节计算

qt中使用opencv处理图片 QImage 和 IplImage 相互之间转换问题

在用opencv处理图片显示在qt label上的时候遇到不是问题 1. qt上要用qimage形式才能显示 IplImage转成 Qimage 彩色图像转换 IplImage  *fram; QImage image((const uchar*)fram->imageData, fram->width, fram->height, QImage::Format_RGB888); 在用opencv二值化以后你再转换发现出现label里面显示多个画面而且还有彩色的怎么回事 这时候得换参数

Qt浅谈内存泄露(总结)

Qt浅谈内存泄露(总结) 来源 http://blog.csdn.net/taiyang1987912/article/details/29271549 一.简介 Qt内存管理机制:Qt 在内部能够维护对象的层次结构.对于可视元素,这种层次结构就是子组件与父组件的关系:对于非可视元素,则是一个对象与另一个对象的从属关系.在 Qt 中,在 Qt 中,删除父对象会将其子对象一起删除. C++中delete 和 new 必须配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大.Qt中使用