在QT中,QTableWidget处理二维表格的功能很强大(QTableView更强大),但有时我们只想让它显示少量数据(文字和图片),这时,使用QTableWidget就有点不方便了(个人感觉)。
所以我对QTableWidget再做了一次封装(SimpleTable类),让它在处理小型表格时更方便。
代码很简单,要解释的就写在注释里面了,欢迎大家使用。

如果大家发现这个类的BUG的话,欢迎提出,大家共同学习。

上代码:

  1. //simpletable.h
  2. #ifndef SIMPLETABLE_H_
  3. #define SIMPLETABLE_H_
  4. #include <QtCore>
  5. #include <QtGui>
  6. class SimpleTable : public QTableWidget
  7. {
  8. Q_OBJECT
  9. private:
  10. public:
  11. //构造函数,无实际内容,直接调用的构造函数
  12. SimpleTable(QWidget *parent = 0) : QTableWidget(parent) { }
  13. SimpleTable(int row, int column, QWidget *parent = 0)
  14. : QTableWidget(row, column, parent) { }
  15. //设置某个单元格中的文字
  16. void SetCellText( int cx, int cy, const QString &text,
  17. int alignment = Qt::AlignLeft,
  18. const QIcon icon = QIcon() );
  19. //在某个单元格中放置一张小图片
  20. void SetCellPixmap(int cx, int cy, const QPixmap &pixmap,
  21. Qt::Alignment alignment = Qt::AlignCenter);
  22. //获取某个单元格中的字符串(如果没有,就返回一个空字符串)
  23. QString GetCellText(int cx, int cy);
  24. //获取某个单元格的图片(如果没有,就返回一张空图片)
  25. QPixmap GetCellPixmap(int cx, int cy);
  26. };
  27. #endif
  28. //simpletable.cpp
  29. #include "simpletable.h"
  30. void SimpleTable::SetCellText(int cx, int cy, const QString &text,
  31. int alignment, const QIcon icon)
  32. {
  33. //检查是否越界
  34. if( cx>=rowCount() || cy>=columnCount() )
  35. {
  36. qDebug() << "Fail, Out of Range";
  37. return;
  38. }
  39. //如果此单元格中已经有item了,就直接更改item中的内容
  40. //否则,新建一个item
  41. QTableWidgetItem *titem = item(cx, cy);
  42. if( NULL == titem )
  43. titem = new QTableWidgetItem;
  44. titem->setText(text);
  45. titem->setTextAlignment(alignment);
  46. //如果图标不为空,就为此item设置图标
  47. if( !icon.isNull() )
  48. titem->setIcon(icon);
  49. setItem(cx, cy, titem);
  50. }
  51. void SimpleTable::SetCellPixmap(int cx, int cy, const QPixmap &pixmap,
  52. Qt::Alignment alignment)
  53. {
  54. if( cx>=rowCount() || cy>=columnCount() )
  55. {
  56. qDebug() << "Fail, Out of Range";
  57. return;
  58. }
  59. //在item中设置图片有很多方法,但我还是觉得在其中放置带图片一个Label最简单
  60. QLabel *label = new QLabel(this);
  61. label->setAlignment(alignment);
  62. label->setPixmap(pixmap);
  63. setCellWidget(cx, cy, label);
  64. }
  65. QString SimpleTable::GetCellText(int cx, int cy)
  66. {
  67. QString result;
  68. if( cx>=rowCount() || cy>=columnCount() )
  69. {
  70. qDebug() << "Fail, Out of Range";
  71. return result;
  72. }
  73. QTableWidgetItem *titem = item(cx, cy);
  74. if( NULL != titem )
  75. {
  76. result = titem->text();
  77. }
  78. return result;
  79. }
  80. QPixmap SimpleTable::GetCellPixmap(int cx, int cy)
  81. {
  82. QPixmap result;
  83. if( cx>=rowCount() || cy>=columnCount() )
  84. {
  85. qDebug() << "Fail, Out of Range";
  86. return result;
  87. }
  88. QTableWidgetItem *titem = item(cx, cy);
  89. if( NULL == titem )
  90. return result;
  91. QLabel *label = dynamic_cast<QLabel*>( cellWidget(cx, cy) );
  92. result = *label->pixmap();
  93. return result;
  94. }

以下是一个简单的测试例子:

    1. //main.cpp
    2. //测试例子
    3. #include "simpletable.h"
    4. int main(int argc, char **argv)
    5. {
    6. QApplication app(argc, argv);
    7. SimpleTable table(20, 10);
    8. for(int i=0; i<20; i++)
    9. {
    10. for(int j=0; j<10; j++)
    11. {
    12. table.SetCellText(i, j, QString::number(i*10+j));
    13. }
    14. }
    15. table.show();
    16. return app.exec();
    17. }

http://blog.csdn.net/small_qch/article/details/7674733

自己封装的一个简易的二维表类SimpleTable的更多相关文章

  1. 写了一个字符串的二维表: TSta

    STA 单元 (用到 System.SysUtils.TStringHelper): --------------------------------------------------------- ...

  2. Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)

    因为面试时问了我这道题,导致我想去了解信号槽到底是如何实现的,于是贴着顺序看了下源码,大致了解了整个框架.网上关于信号槽的文章也很多,但是大部分都是将如何应用的,这里我就写一下我所理解的如何实现吧, ...

  3. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  4. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  5. java_web学习(四) 二维表的制作(初步接触MVC)

    我们需要做一个jsp页面,动态显示信息表的内容. 一.需求分析 1.  做一个实体类:StudentInfo (包含4个字段) 2.  如图模拟生成3条数据,本质上就是new StudentInfo ...

  6. Excel:一维表和二维表 互转

    一.一维表转二维表 数据源: 一份流水账式的值班表,为了便于打印张贴,现在需要使其变成这样的样式: 也就是从一维表变成传说中的二维表. 1.新建查询 依次单击[数据]→[新建查询] →[从文件]→[从 ...

  7. Oracle【二维表管理:约束】

    1.简单的表创建和字段类型最简单的方式去创建表(没有添加主键之类的约束条件)[Oracle的字段类型]number:数值类型--整数类型:number(a) 总长度a--小数类型:number(a,b ...

  8. 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了

    https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...

  9. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

随机推荐

  1. 八、桥接模式--结构模式(Structural Pattern)

    桥梁模式:将抽象化(Abstraction)与实现化 (Implementation)脱耦,使得二者可以独立地变化. 桥梁模式类图: 抽象化(Abstraction)角色:抽象化给出的定义,并保存 一 ...

  2. 利用SQL Profiler处理开销较大的查询

    当SQL Server的性能变差时,最可能发生的是以下两件事: 首先,某些查询产生了系统资源上很大的压力.这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询. 另外,开销较大的查询 ...

  3. 有序线性搜索(Sorted/Ordered Linear Search)

    如果数组元素已经排过序(升序),那我们搜索某个元素就不必遍历整个数组了.在下面给出的算法代码中,到任何一点,假设当前的arr[i]值大于搜索的值data,就可以停止搜索了. #include<s ...

  4. hdu - 4651 - Partition

    题意:把一个整数N(1 <= N <= 100000)拆分不超过N的正整数相加,有多少种拆法. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid ...

  5. Eclipse配置Maven开发环境

    前言: 现在Eclipse版本越来越高.高版本的Eclipse甚至已经集成了Maven像是SpringSource的哪个版本.用习惯了Eclipse.在开发中还是不想更换掉自己的IDE.如此一来就又了 ...

  6. [转载]Matlab中fft与fftshift命令的小结与分析

    http://blog.sina.com.cn/s/blog_68f3a4510100qvp1.html 注:转载请注明出处——by author. 我们知道Fourier分析是信号处理里很重要的技术 ...

  7. Sql Server 2012启动存储过程

    可以通过如下步骤创建 1.打开show advanced options reconfigure 2.打开scan for startup procs,使得sql server在启动时扫描需要运行的p ...

  8. Linux程序设计 读笔3 文件操作

    一 linux文件结构 二 系统调用和设备驱动程序 三 库函数 四 底层文件访问 五 标准IO库 六 格式化输入输出 七 文件和目录的维护 八 扫描目录 九 错误处理 十

  9. linux学习笔记之IO

    一.基础知识. 1:普通IO类型. 1,非阻塞IO:发出open/read/write等IO操作,并使这些操作不会永远阻塞.当不能完成时,会立即出错返回. 1)非阻塞的两种标志方式:指定标志:O_NO ...

  10. 用 alias 给常用命令取个别名

    作为一名iOS开发者,很多时候需要用到命令行,有时候一长串的命令实在让人讨厌,特别是一些常用的命令,我们要一遍一遍不厌其烦的去敲键盘.但是老鸟一般都不会这么傻,因为有 alias,通过alias 我们 ...