Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在用户键入时更新QTextDocument_C++_Qt - Fatal编程技术网

C++ 在用户键入时更新QTextDocument

C++ 在用户键入时更新QTextDocument,c++,qt,C++,Qt,我对Qt还很陌生,我想做一件对我来说很简单的事情,尽管我真的不知道从哪里开始 我使用了一个QTextEdit,我想在用户键入时更新它的样式,例如,将两颗星之间的所有内容都用粗体显示(我正在尝试制作一个基本的标记编辑器) 不过,正如我所说,我不知道该去哪里。我想使用textChanged信号,但如果我执行类似的操作 on textChanged analyze the new text textEdit->setHtml(formatted new text) 插槽正在自动

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

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

不过,正如我所说,我不知道该去哪里。我想使用
textChanged
信号,但如果我执行类似的操作

on textChanged
    analyze the new text
    textEdit->setHtml(formatted new text)
插槽正在自动调用(我的应用程序最终崩溃),因为我的
onTextChanged
正在更改文本

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

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

谢谢

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

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

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

谢谢你。我会调查的。现在,我已经找到了我想要实现的目标。