Qt QSpinBox:如何显示大写十六进制数

Qt QSpinBox: How to display uppercase hexadecimal number

要使用 QSpinBox 输入和显示十六进制数,只需将 displayIntegerBase 设置为 16。但是,我找不到 属性 或方法来将显示设置为大写(例如 1A 而不是 1a)。

我知道我可以重写 textFromValue() 方法来执行此操作,但感觉这是一个相当正常的用例。一定有更简单的方法吧?

我正在使用 Qt 5.12。

您可以通过 spinBox 字体的 setting the capitalization 强制大写为 QFont::AllUppercase

    QFont font = ui->spinBox->font();
    font.setCapitalization(QFont::AllUppercase);
    ui->spinBox->setFont(font);

编辑:我准备了一个小例子来展示行为

#include <QWidget>
#include <QApplication>
#include <QHBoxLayout>
#include <QSpinBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget *w = new QWidget();
    QLayout* layout = new QHBoxLayout(w);

    QSpinBox* spinBox = new QSpinBox(w);
    spinBox->setRange(0, 0xFF);
    spinBox->setDisplayIntegerBase(16);
    QFont font = spinBox->font();
    font.setCapitalization(QFont::AllUppercase);
    spinBox->setFont(font);

    QSpinBox* spinBox2 = new QSpinBox(w);
    spinBox2->setRange(0, 0xFF);
    spinBox2->setDisplayIntegerBase(16);

    spinBox->setValue(0x1a);
    spinBox2->setValue(0x1a);

    layout->addWidget(spinBox);
    layout->addWidget(spinBox2);

    w->show();

    return a.exec();
}

这给出了以下结果: