Qt QFont выбор моноширинного шрифта не работает

Я пытаюсь сделать виджет qt, который показывает таблицу qlabels с шестнадцатеричными числами.

я передаю цифры на метки в виде готовых к печати строк, и метки работают правильно, но тип шрифта является системным по умолчанию (без засечек), который имеет разные размеры букв, поэтому числа, содержащие цифры "AF", больше не выровнены с другие цифры...

я изначально создаю шрифт с помощью функции:

static const QFont getMonospaceFont(){
  QFont monospaceFont("monospace");  // tried both with and without capitalized initial M
  monospaceFont.setStyleHint(QFont::TypeWriter);
  return monospaceFont;
}

и создать кастом QLabel класс, который имеет этот конструктор:

monoLabel(QWidget *parent = 0, Qt::WindowFlags f = 0) : QLabel(parent, f) {
  setTextFormat(Qt::RichText);
  setFont(getMonospaceFont());
}

но это не работает, поэтому я добавляю в основной файл

QApplication app(argn, argv);
app.setFont(monoLabel::getMonospaceFont(), "monoLabel");

и снова шрифт остается неизменным..

я искал в сети проблемы с настройкой шрифтов с QLabelно я, кажется, единственный, кто не заставляет их работать должным образом..

Что я делаю неправильно??

1 ответ

Вы, вероятно, хотите Monospace подсказка стиля, не Typewriter, Следующее работает для меня на OS X под Qt 4 и 5.

Настройка QLabel для форматированного текста не требуется для вашего приложения.

Обратите внимание, что QFontInfo::fixedPitch() это не то же самое, что QFont::fixedPitch(), Последний позволяет узнать, запрашивали ли вы шрифт с фиксированным шагом. Первый указывал, действительно ли вы получили шрифт с фиксированным шагом.

Скриншот

// https://github.com/KubaO/stackrun/tree/master/questions/label-font-18896933
// This project is compatible with Qt 4 and Qt 5
#include <QtGui>
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#include <QtWidgets>
#endif

bool isFixedPitch(const QFont &font) {
   const QFontInfo fi(font);
   qDebug() << fi.family() << fi.fixedPitch();
   return fi.fixedPitch();
}

QFont getMonospaceFont() {
   QFont font("monospace");
   if (isFixedPitch(font)) return font;
   font.setStyleHint(QFont::Monospace);
   if (isFixedPitch(font)) return font;
   font.setStyleHint(QFont::TypeWriter);
   if (isFixedPitch(font)) return font;
   font.setFamily("courier");
   if (isFixedPitch(font)) return font;
   return font;
}

int main(int argc, char *argv[]) {
   QApplication a(argc, argv);
   QString text("0123456789ABCDEF");
   QWidget w;
   QVBoxLayout layout(&w);
   QLabel label1(text), label2(text);
   label1.setFont(getMonospaceFont());
   layout.addWidget(&label1);
   layout.addWidget(&label2);
   w.show();
   return a.exec();
}
Другие вопросы по тегам