1、自定義Qt窗口部件/控件
在某些情況下,我們發(fā)現(xiàn)Qt窗口控件需要更多的自定義定制,這些定制可能要比它在Qt設(shè)計(jì)師里可設(shè)置的屬性或者對(duì)它調(diào)用的那些函數(shù)更多一些。一個(gè)簡(jiǎn)單而直接的解決方法就是對(duì)相關(guān)的窗口部件類(lèi)進(jìn)行子類(lèi)化并且使它能夠滿足我們的需要。
本文主要是通過(guò)實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框,來(lái)演示自定義窗口控件如何使用。
2、十六進(jìn)制微調(diào)框(SpinBox)
QSpinBox一般只支持十進(jìn)制整數(shù),但是通過(guò)重寫(xiě)部分方法,可以讓它支持十六進(jìn)制數(shù)值。
2.1、實(shí)現(xiàn)思路
1、我們通過(guò)正則限制輸入的數(shù)字和字符 [0-9a-fA-F]{1,8}
2、重寫(xiě)validate
方法,用來(lái)檢查目前為止輸入文本的合法性。
3、重寫(xiě)textFromValue
方法,用來(lái)把一個(gè)整數(shù)值轉(zhuǎn)換成一個(gè)字符串。這里我們需要改為十六進(jìn)制的規(guī)則。
4、重寫(xiě)valueFromText
方法,用來(lái)把字符串到整數(shù)值的逆向轉(zhuǎn)換。同樣我們也需要改為十六進(jìn)制的規(guī)則。
2.2、源碼
HexSpinBox.h
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QSpinBox>
class HexSpinBox : public QSpinBox
{
public:
HexSpinBox(QWidget* parent = nullptr);
protected:
// 重寫(xiě)三個(gè)重要的方法
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、使用方法
常規(guī)使用方法有倆種,可以是通過(guò)代碼直接創(chuàng)建HexSpinBox控件,也可以是通過(guò)Qt設(shè)計(jì)師提升窗口部件。
3.1、代碼添加自定義窗口部件/控件
代碼很簡(jiǎn)單,與正常的控件使用方法一樣。
HexSpinBox spin;
spin.show();
3.2、Qt設(shè)計(jì)師添加自定義窗口部件/控件
步驟:
- 從Qt設(shè)計(jì)師的窗口部件工具欄中拖動(dòng)一個(gè)QSpinBox到窗體中,由此創(chuàng)建一個(gè)QSpinBox。
- 右鍵單擊這個(gè)微調(diào)框,并且從上下文菜單中選擇"Promote to Custom Widget"(改進(jìn)成自定義 窗口部件)。
- 在彈出的對(duì)話框中,填人“HexSpinBox"作為類(lèi)的名字,填人“hexspinbox.h"作為頭文件的 名字。
在右側(cè)可以找到這個(gè)對(duì)象的類(lèi)型已經(jīng)是HexSpinBox就表示成功了。
3.3、運(yùn)行效果
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-500914.html
4、缺點(diǎn)
在Qt設(shè)計(jì)師中,無(wú)法對(duì)自定義窗口部件中的那些特定屬性進(jìn)行訪問(wèn),并且也無(wú)法對(duì)這個(gè)窗口部件自身進(jìn)行繪制。所有這兩個(gè)問(wèn)題都可以通過(guò)使用插件法得到解決。下一章節(jié)將會(huì)講到。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-500914.html
到了這里,關(guān)于Qt自定義窗口部件/控件(實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框SpinBox)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!