我正在尝试使用 QPainter 渲染文本,但我不想应用抗锯齿。我是 QT 的新手,所以这里可能做错了什么。无论我尝试过什么,总会有某种抗锯齿功能。我将在下面分享我的代码,其中包含一些关于各种不同的东西的注释行
class TextExample : public QMainWindow {
protected:
void paintEvent(QPaintEvent* aEvent) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, false);
painter.setRenderHint(QPainter::TextAntialiasing, false);
painter.setRenderHint(QPainter::SmoothPixmapTransform, false);
painter.setBrush(Qt::black);
QFont myFont{"Times New Roman", 12};
myFont.setStyleStrategy(QFont::NoAntialias);
painter.setFont(myFont);
// painter.drawStaticText(QPoint{0,0}, QStaticText{"Hello, world!"});
painter.drawText(10, 50, "Hello, world!");
// QTextDocument td;
// td.setHtml("Hello, world!");
// td.drawContents(&painter);
}
};
int main(int aArgc, char *aArgv[]) {
QApplication myApplication{aArgc, aArgv};
// QFont myFont{"Informal Roman", 12};
// myFont.setStyleStrategy(QFont::NoAntialias);
// myFont.setStyleStrategy(QFont::NoSubpixelAntialias);
// QApplication::setFont(myFont);
for (const auto myStr : QFontDatabase::families()) {
qDebug() << myStr;
}
TextExample myMainWindow;
myMainWindow.setWindowTitle("Text Example");
myMainWindow.resize(800, 600);
myMainWindow.show();
return myApplication.exec();
}
我在 qt 6.4.0 中运行它,如果这在 Windows 10 上很重要
需要注意的是,它确实可以与 QPainterPath 一起使用,但我宁愿避免这种情况,因为它更昂贵,而且似乎还有其他绘制文本的问题。
另一件需要注意的事情是,据我所知,有些字体没有抗锯齿功能,一个很好的例子是“MS Sans Serif”。但是为我产生了一个很好的不太友好的警告,同样 QT 不尊重使我能够为这些添加抗锯齿的策略,
DirectWrite: CreateFontFaceFromHDC() failed (Indicates an error in an input file such as a font file.) for QFontDef(Family="MS Sans Serif", pointsize=12, pixelsize=16, styleHint=5, weight=400, stretch=100, hintingPreference=0) LOGFONT("MS Sans Serif", lfWidth=0, lfHeight=-16) dpi=144
任何帮助将不胜感激