首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在QQuickItem中绘制文本

如何在QQuickItem中绘制文本
EN

Stack Overflow用户
提问于 2015-04-14 23:31:00
回答 2查看 1.6K关注 0票数 3

我一直在互联网上搜索如何在QQuickItem上绘制或渲染文本,但一无所获。我选择不使用使用QPainter QQuickPaintedItem ()函数的画图。除此之外,还有一个已知的iOS视网膜显示设备上的QQuickPaintedItem问题,即显示模糊,边缘不清晰。

请建议任何可能的解决方法。

EN

回答 2

Stack Overflow用户

发布于 2015-04-14 23:39:47

由于QtDeclarative已被弃用,因此我选择不使用使用QPainter paint()函数的QQuickPaintedItem

这句话没有多大意义。QtDeclarative是QtQuick1,QQuickPaintedItem是QtQuick2模块的一部分,与QtDeclarative无关。此外,即使它使用QPainter,它仍然是使用OpenGL进行硬件加速的。

在没有QPainter或任何其他类似类的帮助下,重载自定义QQuickItem以在其中手动绘制文本将是一项非常复杂的任务。

QQuickItem基本上是QML的Item元素背后的类。QML也有一个Text元素。QML是为快速UI开发而设计的,手动绘制文本是完全没有意义的。你不需要任何C++,只需要QML:

代码语言:javascript
代码运行次数:0
运行
复制
Item {
    Text {
        text: "something"
    }
}

看看Text元素及其属性,您可以指定字体、颜色等。您也可以直接使用该元素作为图形效果的来源。

票数 2
EN

Stack Overflow用户

发布于 2019-10-29 03:37:32

您可以使用QPainter在像画布一样的QImage上绘图。然后,您可以将其转换为可以分配给QSGSimpleTextureNode的QSGTexture。

以下是我最近编写的代码摘录:

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

在上下文中包含完整工作代码的存储库是here

想要像这样渲染有很多原因。您可以在3D空间中对QSGNodes执行旋转操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29631475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档