Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)

2023-11-06


1、自定义Qt窗口部件/控件

在某些情况下,我们发现Qt窗口控件需要更多的自定义定制,这些定制可能要比它在Qt设计师里可设置的属性或者对它调用的那些函数更多一些。一个简单而直接的解决方法就是对相关的窗口部件类进行子类化并且使它能够满足我们的需要。

本文主要是通过实现一个十六进制微调框,来演示自定义窗口控件如何使用。

2、十六进制微调框(SpinBox)

QSpinBox一般只支持十进制整数,但是通过重写部分方法,可以让它支持十六进制数值。

2.1、实现思路

1、我们通过正则限制输入的数字和字符 [0-9a-fA-F]{1,8}
2、重写validate方法,用来检查目前为止输入文本的合法性。
3、重写textFromValue方法,用来把一个整数值转换成一个字符串。这里我们需要改为十六进制的规则。
4、重写valueFromText方法,用来把字符串到整数值的逆向转换。同样我们也需要改为十六进制的规则。

2.2、源码

HexSpinBox.h

#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H

#include <QSpinBox>

class HexSpinBox : public QSpinBox
{
public:
    HexSpinBox(QWidget* parent = nullptr);

protected:
    // 重写三个重要的方法
    QValidator::State validate(QString& text, int& pos) const override;
    int valueFromText(const QString& text) const override;
    QString textFromValue(int value) const override;

private:
    QRegExpValidator* validator;

};

#endif // HEXSPINBOX_H

HexSpinBox.cpp

#include "HexSpinBox.h"

HexSpinBox::HexSpinBox(QWidget* parent)
    :QSpinBox{parent}
{
    setRange(0, 255);
    validator = new QRegExpValidator(QRegExp("[0-9a-fA-F]{1,8}"), this); // 0x00 0xFF

}

QValidator::State HexSpinBox::validate(QString &text, int& pos) const
{
    return validator->validate(text, pos);
}

int HexSpinBox::valueFromText(const QString& text) const
{
    return text.toInt(nullptr, 16);
}

QString HexSpinBox::textFromValue(int value) const
{
    return QString::number(value, 16).toUpper();
}

3、使用方法

常规使用方法有俩种,可以是通过代码直接创建HexSpinBox控件,也可以是通过Qt设计师提升窗口部件。

3.1、代码添加自定义窗口部件/控件

代码很简单,与正常的控件使用方法一样。

    HexSpinBox spin;
    spin.show();

3.2、Qt设计师添加自定义窗口部件/控件

步骤:

  1. 从Qt设计师的窗口部件工具栏中拖动一个QSpinBox到窗体中,由此创建一个QSpinBox。
  2. 右键单击这个微调框,并且从上下文菜单中选择"Promote to Custom Widget"(改进成自定义 窗口部件)。
  3. 在弹出的对话框中,填人“HexSpinBox"作为类的名字,填人“hexspinbox.h"作为头文件的 名字。

在右侧可以找到这个对象的类型已经是HexSpinBox就表示成功了。
在这里插入图片描述

3.3、运行效果

在这里插入图片描述

4、缺点

在Qt设计师中,无法对自定义窗口部件中的那些特定属性进行访问,并且也无法对这个窗口部件自身进行绘制。所有这两个问题都可以通过使用插件法得到解决。下一章节将会讲到。

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

Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox) 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 【Python】TXT文本文件转换成JSON格式

    主要分为两个部分 1 txtToJson 函数读取指定路径下的所有文件 转换成如下格式 name1 content1 name2 content2 2 saveInJsonFile 函数将处理好的json格式数据和保存的文件路径作为函数参数
  • Android数据加密之MD5加密

    一 前言 项目中无论是密码的存储或者说判断文件是否是同一文件 都会用到MD5算法 今天来总结一下MD5加密算法 二 什么是MD5加密 MD5英文全称 Message Digest Algorithm 5 翻译过来是 消息摘要算法5 由MD2
  • c语言结构体变量所占字节计算,【C语言】结构体占用字节数及存储与空间分配...

    我们都知道在数据类型中 char类型占1个字节 short占2个字节 int占4个字节 long占8个字节等等 在计算结构体大小时需要考虑其内存布局 结构体在内存中存放是按单元存放的 每个单元多大取决于结构体中最大基本类型的大小 下面我们看
  • 网络工程师常用的命令整理-windows版,还不快收藏起来

    一 ping命令 1 ping ping是最常用的实用程序之一 用来确定网络的连通性 ping是个使用频率极高的实用程序 主要用于确定网络的连通性pi 如果ping通一个地址 那么基本可以排除物理层数据链路层的故障等 ping 的命令格式通
  • 使用联机搜索求解Wumpus World

    使用 JavaScript 重写的算法网页 https yuqingxiong github io Wumpus World Problem github仓库地址 https github com YuqingXiong Wumpus Wo
  • CUDA 分块矩阵乘法

    cpp文件 include stdafx h include
  • mips使用buildroot,交叉静态编译file程序出现ld: cannot find -lz错误解决过程

    最近用unbutu X64 版本16 04 使用buildroot 版本2020 2 交叉编译一个mips的目标机 因为目标机没有支持库所以很多程序使用静态编译 这次的主角是file这个程序 运行该程序能知道各类文件的类型及追踪需要的支持库
  • Verilog实现异步FIFO(重难点)

    FIFO总概 图来自文章Simulation and Synthesis Techniques for Asynchronous FIFO Design 一个异步FIFO一共由五个基本模块组成 分别是 RAM存储器模块 FIFO写地址以及写
  • 分享一个基于springboot+vue的职业生涯规划系统源码

    作者 计算机源码社 个人简介 本人七年开发经验 擅长Java Python PHP NET 微信小程序 爬虫 大数据等 大家有这一块的问题可以一起交流 学习资料 程序开发 技术解答 文档报告 JavaWeb项目 微信小程序项目 Python
  • tp摄像头的默认地址_TP-Link路由器默认管理员密码是什么 路由器默认管理员密码介绍【详解】...

    TP Link路由器默认管理员密码是多少 最近有网友咨询了小编这样的问题 其实关于TP Link路由器的默认管理员密码是要根据路由器的型号而介绍的 因为有些型号的TP Link路由器是有默认管理员用户名和密码的 而有些型号是没有的 这对这个
  • Flutter 容器(5) - SizedBoxSizedBox

    SizedBox 两种用法 一是可用来设置两个widget之间的间距 二是可以用来限制子组件的大小 import package flutter material dart class AuthList extends StatelessW
  • squid 用户通过NCSA认证

    Squid的用户认证设置 默认时 Squid本身不带任何认证程序 但是可以通过外部认证程序来实现用户认证 一般有以下的认证程序 LDAP认证 SMB认证 基于mysql的认证 基于sock5的密码认证和基于Radius的认证 下面介绍常用的
  • STM32设置为I2C从机

    硬件平台 STM32F401 编辑器 keil 5 18 操作系统 win7 一 I2C协议 在传输数据的时候 SDA线必须在时钟的高电平周期保持稳定 SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 起始和停止条件 SC
  • JavaScript的三大组成

    文章目录 一 JavaScript三大组成 1 ECMAScript 2 DOM 3 BOM 总结 一 JavaScript三大组成 JavaScript的三个部分为 ECMAScript JavaScript语法规范 是JS的基础也是核心
  • SpringBoot打包jar包并后台运行

    最近又进步了 我一直习惯直接在Intellij Idea中直接运行写好的程序 不过也是因为仅仅是写个模拟接口而已 后来到新公司要负责java后台 开始习惯把项目部署到外部Tomcat去测试 或者打成war包让运维去linux上面部署 不过
  • 基于OpenCV的视频道路车道检测

    基于OpenCV的视频道路车道检测 基于OpenCV的视频道路车道检测 前言 综述 运行方法 车道检测的实现 路面图像二值化 基于透视变换提取车道区域 基于二次多项式拟合车道线 计算曲率半径与车辆的偏移距离 用车道区域标注原始图像 总结 E
  • 网站服务器评测,9.2分! 浪潮服务器受到海外权威专业评测网站肯定

    目前 浪潮服务器业务覆盖全球120个国家和地区 拥有8个全球研发中心 6个全球生产中心以及2个全球服务中心 海外权威服务器专业评测网站ServeTheHome 简称STH 曾对浪潮NE5260M5边缘服务器进行测评 该服务器斩获9 2的高分
  • threejs实现一个固定大小的3d标点

    需求背景 需要在3d模型上实现标注的功能 一开始是直接通过添加一个普通的mesh来实现的 但是这样就会有一个问题 当视图缩放的时候 标注也会跟着一起放大缩小 影响视觉效果 因此需要实现一个不会随着视图一起放大或者缩小的mesh 实现思路 明
  • MongoDB update数据语法

    mongodb更新有两个命令 1 update 命令 db collection update criteria objNew upsert multi criteria update的查询条件 类似sql update查询内where后面
  • Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)

    目录 1 自定义Qt窗口部件 控件 2 十六进制微调框 SpinBox 2 1 实现思路 2 2 源码 3 使用方法 3 1 代码添加自定义窗口部件 控件 3 2 Qt设计师添加自定义窗口部件 控件 3 3 运行效果 4 缺点 1 自定义Q