[英]how to draw text in QQuickItem
我一直在互联网上搜索如何在 QQuickItem 上绘制或渲染文本,但无济于事。 我选择不使用使用 QPainter 绘制()函数的 QQuickPaintedItem。 除此之外,在 iOS 视网膜显示设备上还有一个已知的 QQuickPaintedItem 问题,其中显示模糊且边缘不清晰。
请就此提出任何可能的解决方法。
由于 QtDeclarative 已被弃用,我选择不使用使用 QPainter 绘制()函数的 QQuickPaintedItem
这种说法没有多大意义。 QtDeclarative
是 QtQuick1, QQuickPaintedItem
是 QtQuick2 模块的一部分,与QtDeclarative
无关。 此外,即使它使用QPainter
它仍然使用 OpenGL 进行硬件加速。
如果没有QPainter
或任何其他类似类的帮助,重载自定义QQuickItem
以在其中手动绘制文本将是一项非常复杂的任务。
QQuickItem
基本上是 QML 的Item
元素背后的类。 QML 还有一个Text
元素。 QML 是为快速 UI 开发而设计的,手动绘制文本完全没有意义。 为此,您不需要任何 C++,只需要 QML:
Item {
Text {
text: "something"
}
}
查看Text
元素及其属性,您可以指定字体、颜色等。 您也可以直接使用该元素作为图形效果的来源。
您可以使用 QPainter 像画布一样在 QImage 上进行绘制。 然后您可以将其转换为可以分配给 QSGSimpleTextureNode 的 QSGTexture。
这是我最近为执行此操作而编写的代码摘录:
QColor color("steelblue");
QRect rect(0,0,aw, ah);
for(auto ch: m_charList){
QImage canvas(rect.width(), rect.height(), QImage::Format_RGBA8888);
canvas.fill(QColor("transparent"));
QPainter painter(&canvas);
QFont font = painter.font();
//font.setPixelSize(48);
font.setPixelSize(rect.width());
font.setBold(true);
painter.setFont(font);
painter.setPen(color);
QRect bounding = QRect(0, 0, rect.width(), rect.height());
painter.drawText(0, 0, rect.width(), rect.height(), Qt::AlignCenter, ch, &bounding);
QSGTexture *texture = this->window()->createTextureFromImage(canvas);
m_textureList[ch] = texture;
}
上下文中包含完整工作代码的 repo 在这里。
想要这样渲染的原因有很多。 您可以在 3D 空间中对 QSGNodes 进行旋转。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.