我正在尝试创建一个qt小部件,显示一个显示十六进制数字的qlabels表。
我将数字传递给标签,因为qstrings准备打印并且标签正常工作但字体类型是系统默认值(无衬线字体),具有不同的字母大小,因此包含“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
的字体设置问题,但我似乎是唯一一个没有让它们正常工作的人..
我做错了什么?
答案 0 :(得分:4)
您可能需要Monospace
样式提示,而不是Typewriter
。以下适用于Qt 4和5下的OS X.
将QLabel设置为富文本对于您的应用程序是不必要的。
请注意,QFontInfo::fixedPitch()
与QFont::fixedPitch()
不同。后者让您知道您是否要求固定音高字体。前者表明你是否真的有固定音高字体。
// https://github.com/KubaO/stackoverflown/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();
}