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

这篇具有很好参考价值的文章主要介绍了Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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就表示成功了。
Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)

3.3、运行效果

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

4、缺点

在Qt设计师中,无法对自定义窗口部件中的那些特定属性进行访问,并且也无法对这个窗口部件自身进行绘制。所有这两个问题都可以通过使用插件法得到解决。下一章节将会讲到。文章来源地址https://www.toymoban.com/news/detail-500914.html

到了这里,关于Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包