问题标签 [qtextdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3522 浏览

html - QTextDocument HTML表格宽度

我正在努力解决 QT5 问题。我正在尝试构建(然后在QPainter对象上绘制)一个 HTML 表。这是我的代码:

该表在画家中正确显示但没有固定的列宽。为了达到这个结果,我几乎尝试了所有方法:

这些方法都不起作用。此外,如果我尝试添加一些空格来填充行,一旦绘制表格,它们就会被修剪掉。我还读到我可以使用WebView来实现结果,但它太慢了。我被卡住了,我希望有人可以帮助我解决这个问题。

0 投票
2 回答
1200 浏览

qt - QTextDocument 序列化

我阅读了关于 QTextDocument 序列化的旧主题:herehere。据我了解,一次真正的无需额外代码的序列化和反序列化方法是将文档保存和读取为 html 文件。但是,我认为,这种方法并不快,因为 html 字符串解析是一项艰巨且耗时的操作。

在其他情况下,我可以将文档保存为二进制格式并通过按顺序调用的 QTextCursor 方法对它们进行反序列化,我认为这比 html 解析更快。

QTextDocument 二进制序列化是否存在代码示例?

0 投票
2 回答
574 浏览

c++ - 更新 QTextDocument 的大小

我对 QTextDocument::size() 有疑问

每次用户手动向 TextEdit 输入内容时,文档的大小都会更新。(所以在 SIGNAL textChanged中它工作正常)。但是,我通过代码插入了一些文本。

当我使用这个时:

iHeight 始终等于 21,即使 textEdit 有多行文本。当我在我谈到的 SIGNAL 中使用同一行代码时,iHeight 神奇地变成了正确的数字。

所以基本上,我的问题是如何更新文档的大小以使其返回正确的数字?

0 投票
1 回答
574 浏览

c++ - QTextDocument:如何从缓存中删除资源

我的程序正在使用几个不同QTextBrowser的 s 向用户显示内容。其中一些内容有图像。我从文件加载到QPixmaps 并将它们添加到要显示的文本文档中。

假设这样的代码:

后来,我不再需要浏览器,所以删除它:

现在我的问题是:如何从缓存中删除添加到此已删除浏览器的资源?

QTextDocument文件提到:

void QTextDocument::addResource(int type, const QUrl & name, const QVariant & resource) 将资源资源添加到资源缓存中,使用类型和名称作为标识符。

因此,资源一直保留在缓存中,直到我关闭应用程序。但是我需要事先清除它,因为缓存中添加了很多资源,并且应用程序可能会连续运行几天。

0 投票
2 回答
2011 浏览

c++ - QPrinter 无法正确设置 HTML 页面样式以在 PDF 文档中呈现图像

我想创建一个样式正确的 HTML 的 PDF 文档。这就是我正在尝试的:

我希望 PDF 有 2 页 - 第一个带有文本Hi,下一个和最后一个带有文本Bye。第一个页面的样式类似于它出现在具有相同标记的 HTML 页面中:

在此处输入图像描述

但是,PDF 的第一页内容完全混乱:

在此处输入图像描述

我如何使它看起来像预期的那样?

我在 HTML 文档中尝试的图像:http: //imgur.com/RnSghvV

平台 - Qt 5.3.1,32 位。OS X 优胜美地。

0 投票
1 回答
1076 浏览

html - 设置 QTextDocument 画家的矩形(在哪里绘制)

我正在使用 QTextDocument::drawContents(painter) 在窗口简单的 html 上绘画

我想在窗口的一些边距内进行绘图,但我看不到指定绘画目标矩形的直接方法(在画家/窗口中)。

我想有几种方法可以做到:

  • 使用 QTextDocuments::setMargin (尽管这不允许 left/top 使用不同的值。

  • 将 html 放入样式中<div>

  • 对画家应用平移变换。

但是对于我想做的事情来说,这一切似乎有点太多了,我想如果我遗漏了一些直接的东西(就像你对 QPainter::drawText 所做的那样,你告诉目标矩形)

0 投票
1 回答
1283 浏览

qt - 在 QTextDocument 中设置默认字符格式

我有一个QTextEdit用户可以编辑QTextDocument的地方。

我想为文档设置默认颜色和字体,但是,当文档中没有文本时,格式会被丢弃。

这是我的代码:

显示编辑器时,我看到一条黑色背景的线,具有一定的高度。所以这似乎奏效了。

但是,一旦我开始输入,行号就会减小,而且我看不到任何文本。选择输入的文本时,我可以看到它是黑色的(在黑色背景上),并且它的字体发生了变化。

当我使用光标插入一些非空文本时,一切正常,并且在编辑时格式不会改变:

有没有办法让编辑器保持格式,而不插入虚拟文本?

如本主题的其他问题中所述,我不能在编辑器上使用样式表或调色板。一切都必须使用QTextFormats直接完成

0 投票
1 回答
4386 浏览

qt - 设置精确高度和宽度的 QGraphicsTextItem 文本内容

我需要创建具有精确宽度和高度的文本内容的文本项。
文字的高度是最重要的要求。
文本的位置应该相对于文本本身。

我还必须能够将它放置在画布上的确切位置。

假设一个(可打印的)画布(在较大的QGraphicsScene)上,比如 5 英寸宽和 1 英寸高,我的文本应该能够从上到下从左到右拉伸 - 并放置在画布上,而不是部分地分开。


我正在QGraphicsTextItem为我的项目类型分类。我正在调整它的大小,使用QTransform(), 到所需的大小 - 以英寸或毫米或像素(72 * 英寸)为单位。
还将边距设置document()为 0,内部的任何内容(如QTextBlockFormat边距)也设置为 0。

我已经实现了一个setItemSize(QSizeF sz)(以像素为单位的 sz),它可以QGraphicsTextItem根据需要调整大小。
使用项目边界矩形初始化 sz。
假设没有换行,单行文本(一旦这个问题得到解决,多行可以单独解决)。

将项目添加到画布时,我仍然看到顶部和底部边距 - 这取决于字体选择。
我在项目周围画了一个矩形来查看它。
顶部/底部距离取决于字体选择。


我尝试使用字体度量来确定这些距离(paint()我一直在画线以尝试确定文本适合的位置和矩形)。

我很高兴至少能够确定正确的大小以用于大写,没有重音或特殊字符字体(这将是一个开始,尽管我自然需要能够使用任何字符)。
但至少有某种方法可以确定文本内容的大小和位置(相对于项目的(0,0)),即使在最简单的情况下......

字体指标tightBoundingRect()似乎是最准确的大小,但似乎无法确定它的位置,以便我可以以某种方式正确创建我的项目,并可能正确调整大小/移动它们以适合画布。


以下是我努力确定相对于项目的 (0,0) 的文本的至少确切大小和位置的一些示例(假设一旦我这样做,我就能够将该信息暴露给外部或包括转变在调整大小的项目变换中)。
请注意,字体度量所宣传的文本大小并不总是覆盖文本,并且对于不同的字体,我无法将紧密的边界矩形(洋红色)定位在文本本身周围。(我做了多次猜测,下面的代码只是一个 - 这些行试图显示不同的字体度量大小)。

在此处输入图像描述

以上是文本项继承绘制功能的实验QGraphicsTextItem

我也尝试过不使用QGraphicsTextItem,而是在矩形内绘制文本。同样的事情也会发生。

(Qt 4.7 - 5.x)

0 投票
2 回答
1270 浏览

c++ - QTextEdit 更新单 QTextCharFormat

我正在尝试为单个字符更新 QTextCharFormat。但它不适用:

输出:

知道缺少什么吗?

0 投票
1 回答
508 浏览

qt - 自定义项目委托[Qt]呈现的项目中错误的富文本高度(QTextDocument)

我的树视图项目委托中的 QTextDocument 的文本高度有问题。

我的paint() 和sizeHint() 方法几乎完全一样,只是计算不同高度的文本(相同的文本)。

高度差因字体而异。如果所有内容都以一种尺寸书写,则高度是正确的,但如果我使用不同的尺寸,则高度不匹配。

我阅读了有关使用字体度量或计算字体高度表单 paiter.boundingRect 的主题,但我不知道如何在 QTextDocument 中使用它。

我认为问题出在字体上,所以我使用下面的代码将字体全局更改为一种。它没有帮助。

我的自定义 itemDelegate 中的代码是:

和paint方法几乎一模一样。

sizeHint 中的文本用于确定项目高度,所以现在看起来如下图所示: 图片

我在 Windows 上使用 Qt 5.7.1 MSVC 2015 64 位,但在带有 gcc 的 Ubuntu 16.04 上问题是一样的。