【问题标题】:Rich text to image in QTQT中的富文本到图像
【发布时间】:2014-06-18 22:12:55
【问题描述】:

在我的应用程序中,有一个接受富文本输入的QTextEdit 对话框。出于某种目的,我需要将此输入转换为图像。

如果是纯文本,我可以使用与 QPainter 类关联的 DrawText。但富文本不能以与我们不知道格式化完成的方式相同的方式处理。

关于如何转换的任何建议?

【问题讨论】:

  • 从 QWidget 派生的类可以使用QWidget::render() 方法绘制自己。自己没试过。但希望即使小部件被隐藏它也能正常工作,因此您可以为小部件的副本选择任意矩形大小而不会干扰您的输入(如果需要)。不知道 QTextEdit 是否会坚持填充背景或能够透明绘制。但这是一个开始。

标签: qt qpainter


【解决方案1】:

您可以通过以下方式获取 QTextEdit 的内容:

QTextEdit te("This is a rich text");
te.resize(100, 100);
QPixmap pix = QPixmap::grabWidget (&te, te.rect());
pix.save("test.png");

【讨论】:

  • 抓取小部件仅检索屏幕上可见的文本部分。因此,如果 TextEdit 有多个段落(启用滚动的短文本框) - 此解决方案将不适用吗?
  • 是的。您可以尝试抓取视口。或者查看我的解决方案;)
【解决方案2】:

您可以使用QTextEdit::document + QTextDocument::drawContents。您不需要像其他作者建议的那样对渲染小部件进行任何技巧,因为抗锯齿设置可能存在一些问题。

【讨论】:

  • 尝试将图像的路径维度转换为drawContents 方法。并且,请将其作为 SSCCE 发布。并直接使用myTextEdit->document()->drawContents() 而不是你的代码开销。
【解决方案3】:

或者,如 cmets 中所述,您可以使用小部件的 render 方法将小部件内容绘制到像素图中:

void saveImage(QTextEdit* te) {
    QPixmap pixmap(te->size());
    QPainter painter(&pixmap);

    te->render(&painter);
    pixmap.save("test.png");
}

这本质上就是QPixmap::grabWidget() 方法在内部所做的。

【讨论】:

  • 与渲染相同。渲染仅检索屏幕上可见的文本部分。因此,如果 TextEdit 有多个段落(启用滚动的短文本框) - 只有文本的可见部分会与滚动条一起被光栅化为图像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2022-09-02
  • 2021-05-09
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多