国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt自定義窗口部件/控件(實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框SpinBox)

這篇具有很好參考價(jià)值的文章主要介紹了Qt自定義窗口部件/控件(實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框SpinBox)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


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ì)師添加自定義窗口部件/控件

步驟:

  1. 從Qt設(shè)計(jì)師的窗口部件工具欄中拖動(dòng)一個(gè)QSpinBox到窗體中,由此創(chuàng)建一個(gè)QSpinBox。
  2. 右鍵單擊這個(gè)微調(diào)框,并且從上下文菜單中選擇"Promote to Custom Widget"(改進(jìn)成自定義 窗口部件)。
  3. 在彈出的對(duì)話框中,填人“HexSpinBox"作為類(lèi)的名字,填人“hexspinbox.h"作為頭文件的 名字。

在右側(cè)可以找到這個(gè)對(duì)象的類(lèi)型已經(jīng)是HexSpinBox就表示成功了。
Qt自定義窗口部件/控件(實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框SpinBox)

3.3、運(yùn)行效果

Qt自定義窗口部件/控件(實(shí)現(xiàn)一個(gè)十六進(jìn)制微調(diào)框SpinBox)

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)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包