c++ 如何在Qml TextEdit组件中安全地编辑QTextDocument

wwtsj6pe  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(95)

bounty还有7小时到期。回答此问题可获得+100声望奖励。Adriano想要引起更多关注这个问题:我正在寻找一个可行的答案,在如何修改一个基础QTextDocument从QML TextEdit组件安全。

我正在使用QML开发一个协作文本编辑器,我已经在Qt C++中试验了底层机制,它工作正常。然而,当尝试在QML中实现时,我似乎遇到了一个问题:存储在QML TextEdit组件中的QTextDocument不可触摸。如文档中所述:
警告:提供的QTextDocument由Qt Quick元素在内部使用,以提供文本操作原语。不允许对QTextDocument的内部状态进行任何修改。如果这样做,有问题的元素可能会停止运行或崩溃。
我最终使用的过程是使用QTextCursor编辑QTextDocument,我已经通过在QML TextEdit对象中提取QTextDocument进行了测试,但我担心文档中提供的警告。
有没有什么安全的方法来编辑QTextDocument?比如信号/插槽之类的?事实上,我不能编辑QTextDocument而不冒崩溃的风险,这似乎是QML设计中一个相当大的限制,不是吗?它只能从UI本身修改?
我错过什么了吗?

jhiyze9q

jhiyze9q1#

您根本无法更改QTextEdit的内部状态。把它当作const来处理。
要更改文档的文本,TextEdit组件本身提供了一些方法,如insert(int position, string text)string remove(int start, int end)
当然,这比使用QTextCursor要有限得多,但足以使您的协作文本编辑器成为可能。
如果你真的想要控制,你可能想要实现你自己的QML类型。然后你就可以完全控制内部的一切。

相关问题