绘制字体图标,只要得到图标在字体里的编码,就可以直接绘制
上图中16进制的Unicode就是图标的编码,绘制图标的代码如下
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing, true);
p.setRenderHint(QPainter::TextAntialiasing, true);
auto fontIcon = Util::getIconFont();
fontIcon->setPixelSize(16);
p.setFont(*fontIcon);
p.setBrush(Qt::NoBrush);
p.setPen(QColor(121, 123, 127));
p.drawText(QPoint(76, 36), QChar(0xe76b));
上面代码用到了一个工具函数getIconFont,来获得字体,代码如下:
QFont* Util::getIconFont()
{
static QFont font = []() {
int fontId = QFontDatabase::addApplicationFont(":/Res/iconfont.ttf");
QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0);
QFont iconFont(fontName);
iconFont.setPixelSize(10);
iconFont.setStyleStrategy(QFont::PreferAntialias);
iconFont.setHintingPreference(QFont::PreferNoHinting);
return iconFont;
}();
return &font;
}
但有的时候字体图标的编码是放到数据库里的,此时就得考虑把字符串转型为QChar再绘制图标。具体得代码如下所示:
bool ok;
uint codePoint = QString("e76b").toUInt(&ok, 16);
auto icon = QChar(codePoint);