Qt QSpinBox: как отобразить шестнадцатеричное число в верхнем регистре

Чтобы использовать QSpinBox для ввода и отображения шестнадцатеричных чисел, просто установите для displayIntegerBase значение 16. Однако я не смог найти свойство или метод для установки отображения в верхнем регистре (например, 1A, а не 1a).

Я знаю, что я могу переопределить метод textFromValue(), чтобы сделать это, но это похоже на довольно обычный вариант использования. Должен быть более простой способ сделать это, верно?

Я использую Qt 5.12.


person chunjiw    schedule 15.05.2019    source источник


Ответы (1)


Вы можете принудительно использовать верхний регистр, установив капитализацию вашего шрифта spinBox на QFont::AllUppercase

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

EDIT: я подготовил небольшой пример, чтобы показать поведение

#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();
}

Это дает следующий результат:

Прописные и строчные шестнадцатеричные счетчики

person Cendolt    schedule 16.05.2019