问题标签 [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 回答
2981 浏览

qt - 找到所有想要的字符串并使用 QPlainTextEdit::setExtraSelections() 选择它们

我试图突出显示在 QPlainTextEdit 小部件中找到的所有字符串,但 find() 只会返回第一个结果。下面的代码不起作用,为什么?

(textview 是从 QPlainTextEdit 派生的一个类)

并且请不要让我使用 QSyntaxHighlighter 来设置颜色,它是不同的。

0 投票
1 回答
455 浏览

python - 在两个 qtextedits 或一个 qtextedit 和 qscintilla 之间同步内容和撤销历史

我正在使用 pyqt4 编写博客编辑器。我的问题是这个。有一个所见即所得的编辑器选项卡和一个 html 代码编辑器选项卡。在一个中所做的更改应该反映在另一个中。一种选择是在 qtextedit 中的文本更改时使用 setHtml 和 toHtml 函数。但是这种方法的问题是,当我在 qtextedit 上使用 setHtml 时,所有以前的编辑撤消历史都会丢失。如果我尝试在 textchanged 信号上维护自己的历史记录,将使用大量内存。考虑我输入一个句子,每个字符都会发出 textchanged 信号,而撤消将是一个字符一个字符。

我尝试在两个 qtextedits 之间共享相同的 qtextdocument,但这也失败了,因为突出显示链接到 qtextdocument,因此适用于两个 qtextedits。

另一种选择是当用户在所见即所得的编辑器窗口中工作时什么都不做。当用户在 html 代码编辑器中进行一些编辑时,我会等到用户完成编辑,然后一旦完成,我会找到编辑的差异,并以某种方式在所见即所得编辑器的 qtextdocument 中进行相应的编辑更改。这是可以实现的吗?如何在 qtextdocument 中进行这样的更改?有没有我不知道的更简单的方法?

请帮忙。

0 投票
1 回答
1567 浏览

qt - 使用 QSyntaxHighlighter 隐藏文本

问题:我想为带有附加标签的文本实现一个文本编辑小部件。我希望某些标签在某些情况下不可见,以免分散用户的注意力。

环境:我正在使用PyQt并且更喜欢使用QPlainTextWidgetand QSyntaxHighlighter.

方法:QSyntaxHighlighter可以设置QTextCharFormat符合我要求的字符串。QTextCharFormathas 为我提供了所有字体属性,如大小、颜色等,但是:我还没有找到隐藏文本或将其大小减小为零的选项。

我不想删除或替换标签,因为这会引入更多代码(复制应该包含标签,没有我不能QSyntaxHighlighter用于根据标签格式化剩余的文本)。

更新:到目前为止,我发现了一个丑陋的黑客。通过将QTextFormat::FontLetterSpacing设置为较小的值,文本将占用越来越少的空间。结合透明颜色,文本就像是不可见的。

问题:在我的测试中,这仅适用于低至 0.016 % 的字母间距。低于间距将重置为 100 %。

0 投票
1 回答
5127 浏览

c++ - QTextDocument::drawContents 仅以 96 dpi 呈现

我正在使用 QPrinter 和 QPainter 创建高分辨率 (1200 dpi) PDF 文档。我正在尝试使用 QTextDocument::drawContents 以相同的分辨率绘制文本。我想使用 QTextDocument 的原因是因为我需要在我的文档中包含许多表格和格式化文本。

我的问题是 QTextDocument::drawContents 总是以屏幕分辨率插入文本,在我的例子中是 96 dpi。到目前为止,我发现的所有解决方案都建议缩放文本以达到正确的大小。但是,这会导致文本质量低下,这是我无法承受的。

我的问题:有没有办法以高分辨率绘制 QTextDocument 的内容?

下面的代码创建了一个包含 2 行文本的 PDF 文件,其中一行使用 QPainter::drawText 绘制,另一行使用 QTextDocument::drawContents 绘制。我使用了 Arial 8pt 字体来强调缩放导致的低质量问题。

0 投票
1 回答
8099 浏览

qt - 从 QTextEdit 中删除一行/块

我正在努力从QTextEdit. 下面的代码应该(?)工作,但由于某些我不知道的原因,它最终进入无限循环。如果正在编辑,我怀疑next()并且previous()不受欢迎。QTextDocument

QTextDocument::findBlockByNumber()以与上述相同的方式迭代使用和删除块也不起作用。

如果有人能指出我如何迭代所有块并在需要时删除它们,我将不胜感激。

PS
在我的特殊情况下,一个块 = 一行。
Qt 4.6.2,Ubuntu 10.04 x64

0 投票
1 回答
140 浏览

c++ - 如何确定 QTextBlock 的字体

假设用户将一些随机文本粘贴到QTextEdit. 您如何确定该文本的字体。例如,中文。

我已经尝试过获取QTextCharFormat该块。但它似乎没有信息。查询给fontFamily()我一个空字符串。

我也尝试使用QTextLayout- 但这似乎让我获得了文档的默认布局,而不是特定的文本块。

感谢您的任何指示。

0 投票
1 回答
1027 浏览

c++ - QPlainTextEdit 抛出 std::bad_alloc

我有一个程序可以运行适合某些数据的最小二乘法。此过程在单独的线程中运行,并通过对话框进行控制。这个对话框有一个 QPlainTextEdit 显示拟合更新和最终报告。

该对话框是在 Qt Designer 中创建的,代码在 QtCreator 中运行,我的 Qt 版本是 4.8.1。

我遇到的问题有点不稳定。当我第一次运行该程序时,一切都很好。然后,如果我再次运行它,有时程序会因消息而崩溃

抛出 'std::bad_alloc' 的实例后调用终止 what(): std::bad_alloc 程序意外完成。

我将问题跟踪到对 QPlainTextEdit 的 clear() 方法的调用。这是一些代码。

txtInfo是 QPlainTextEdit 对象。我在创建对象时调用 atxtInfo->clear()以显示空文本编辑。当我单击“运行”工具按钮时,其默认插槽会发出一个运行信号,该信号将启动新线程。QPlainTextEdittxtInfo在这个线程中更新,直到它完成(实际上线程发出一个信号,该信号在主应用程序中被捕获,该主应用程序又调用UpdateDisplay)。

如果我再次单击运行按钮,则会出现崩溃和错误。如果我替换txtInfo->clear(), txtInfo->document()->clear(), bytxtInfo->setPlainText("")或 bytxtInfo->document()->setPlainText("")问题是相同的(第二次执行时崩溃)。偶尔但不经常,我可以在崩溃之前运行几次(大约 10 次)。

最后,如果我注释掉该txtInfo->clear()行,那么我可以尽可能多地运行该例程(在一次测试中,我在运行它大约 80 次后感到疲倦)。

我唯一的(几乎是随机的)猜测是问题与线程的更新有关(它发出一个被捕获的信号,然后只是调用UpdateDisplay函数)。我这么认为的原因是,如果我注释掉信号并创建一个新按钮来调用UpdateDisplay一些虚假信息,一切都很好。

违规行之前的AqApp->processEvents()无效。

我被困在这里。欢迎任何想法。例如,我可以做任何测试来验证调用该clear()方法是否正常?

0 投票
1 回答
753 浏览

qt - Qt - 几个 QTextBlock 内联

是否可以将 QTextDocument 中的多个 QTextBlocks 排列在一条水平线上?

我需要知道点击了哪个文本块,并且 QTextBlock 会很好用,因为它的方法 setUserState(int) 可以用来保存特定块的 id。有更好的方法吗?

0 投票
1 回答
406 浏览

python - Python/C++、PyQt4/Qt4:如何在 QTextTable 的单元格中插入多行文本

我正在尝试使用 PyQt4 创建一个 odt 文档。该文档涉及在单元格中插入多行文本。我的示例代码:

我希望“第 1 行”和“第 2 行”位于同一个单元格中,但由于换行,它们位于不同的单元格中。这也与上面的代码具有相同的效果:

0 投票
1 回答
1602 浏览

c++ - Qt4/PyQt4 - 无法为 QTextDocument 设置默认字体

我的代码是这样的:

输出中的“示例文本”在我的计算机上仍然是“Sans”,而不是“Times New Roman”。我已确保我的计算机具有“Times New Roman”字体。我怀疑这是一个错误。我正在使用 PyQt v4.9.5。

编辑:我使用的是 Ubuntu 12.04。我很确定 PyQt4 可以找到字体,因为以下代码有效:


以 odt/odt 格式保存时,似乎并非所有格式都受支持,但在打印到 pdf 时一切正常。

setDefaultfonts 和 setColumnWidthConstraints 影响 sample.pdf,但不影响 sample.odt。