我目前有一个从QQuickPaintedItem
继承的C++类。我用它通过QTextDocument
(或直接调用其QTextDocumenLayout的QTextDocument::drawContents
方法)从draw
绘制布局的,分页的富文本。
但是,如QQuickPaintedItems
文档中所述,存在一些线程问题需要注意:
具体而言,在这种情况下,QTextDocumentLayoutPrivate
具有计时器,当调用QTextDocumenLayout::draw
时,计时器会启动/停止。不幸的是,QTextDocument
和计时器都位于qml主线程中,而paint
在渲染线程中被调用,导致出现类似
尽管目前为止这并不影响我的应用程序的功能,但这可能不是一件好事。
因此,我的问题是,是否有更好的方法来显示QML中的分页文本(不一定涉及QQuickPaintedItem
)。
最佳答案
目前,我仍在使用QQuickPaintedItem
,当调用paint
时,请执行以下操作:
QTextDocument
是否已将其亲和性设置为其当前线程。如果是,我将照常进行。 QMetaObject::invokeMethod
用于调用将文档移至渲染线程的方法,并调用update
触发重绘,该方法现在可以在线程亲和力正确的情况下使用。在paint
的末尾,QTextDocument
的线程亲和力被设置回原始线程。 据我所知,这是可行的(不再发出警告),但是从概念上来说,这是错误的。
关于c++ - 如何在QML中显示来自QTextDocument的分页文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49221611/