在用户键入时更新 QTextDocument

Updating QTextDocument while user is typing

本文关键字:更新 QTextDocument 用户      更新时间:2023-10-16

我对Qt很陌生,我想做一件对我来说看起来很简单的事情,尽管我真的不知道从哪里开始。

我使用QTextEdit,我想在用户键入时更新其样式,例如,将两颗星之间的所有内容都以粗体显示(我正在尝试制作一个基本的Markdown编辑器(。

虽然,正如我所说,我不知道该去哪里。我想使用textChanged信号,但是如果我做类似的事情

on textChanged
analyze the new text
textEdit->setHtml(formatted new text)

老虎机只是在调用自己(我的应用程序最终崩溃(,因为我的onTextChanged正在更改文本......

我该怎么办?我以为我可以使用线程(在用户键入时进行分析(,但我担心这样做可能很困难,因为它会导致非 UI 线程访问和修改 UI 线程中的内容......

我真的在这里寻找设计建议...

谢谢

您可以将 setHtml(QString( 包装在对 blockSignals(bool( 的两次调用之间,以防止 QTextEdit 再次发出 textChanged(( 信号。

textEdit->blockSignals(true);
textEdit->setHtml(text);
textEdit->blockSignals(false);

不知道这是否是最好的设计选择。你可以尝试研究QTextEdit API,看看它是否值得从中继承,并专门化它的行为,即使我不相信它被设计为被继承。