qt实现十六进制显示控件

时间:2024-03-26 22:29:12

前言

使用Qt编写一个类似串口助手的小工具,刚开始使用qt自带的QTextEdit类显示,在使用中发现存在诸多问题,首先最令人诟病的是QTextEdit的自动换行,每次调用append方法后会自动换新行。不知道有没有方法关闭这一特性,反正我是没找到。另一方面当数据量比较大的时候界面卡到爆炸,拖动窗口都拖不动。

所以考虑自己实现一个显示控件用来显示这些串口数据,参考了一个抓包软件的显示方法既能显示16进制又能显示字符串的界面,同时因为自己实现的功能比较专注于显示,没有其它用不到的功能,所以运行效率会比较高。界面如下:
qt实现十六进制显示控件

功能介绍

该显示控件功能为显示QByteArray类型数据,特性如下:

  • 十六进制和字符串分块显示,同时内容关联,当鼠标选择16进制数据区时字符串区内容也会处于选定状态。

  • 自定义选择复制内容,可以选择复制16进制或者字符串内容。

  • 可以设置每行显示数据大小,默认每行显示16个字符,设置范围是2-64。

  • 全选和清除内容功能。

  • 自动滚屏功能,可以选择开启或者关闭自动滚屏功能,开启后视图会永远保留在最底端。

以上功能都可以通过右键界面进行操作。这里写了一个调用的demo,每次点击添加测试数据都会模拟串口接收到数据添加到显示控件,演示效果如下:

qt实现十六进制显示控件

自动滚屏功能:

qt实现十六进制显示控件

设置列宽功能:

qt实现十六进制显示控件

实现方法

以上功能实现主要继承自QAbstractScrollArea类,重写了其中绘图事件和鼠标事件等,通过鼠标事件确定显示内容,然后更新绘制显示内容。数据通过append方法附加到内部QByteArray容器内。同时自定义了右键菜单,所以调用后直接右键就会出现上图那些右键功能。具体代码就不放了,太多了,感兴趣的可以下载下这个demo。附上资源下载链接

相关文章