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本身修改?
我错过什么了吗?
1条答案
按热度按时间jhiyze9q1#
您根本无法更改
QTextEdit
的内部状态。把它当作const
来处理。要更改文档的文本,
TextEdit
组件本身提供了一些方法,如insert(int position, string text)
和string remove(int start, int end)
。当然,这比使用
QTextCursor
要有限得多,但足以使您的协作文本编辑器成为可能。如果你真的想要控制,你可能想要实现你自己的QML类型。然后你就可以完全控制内部的一切。