用户键入时更新QTextDocument

时间:2018-05-30 14:03:07

标签: c++ qt

我对Qt很新,我想做一件对我来说很简单的事情,虽然我真的不知道从哪里开始。

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

尽管如我所说,我不知道该往哪里去。我想使用textChanged信号,但如果我做了类似

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

插槽只是调用自己(我的应用程序最终崩溃)因为我的onTextChanged正在更改文本...

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

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

不知道它是否是最佳设计选择。您可以尝试研究QTextEdit API,看看它是否值得继承它并专门化它的行为,即使我不相信它是为了继承而设计的。