我目前有一个从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/

    10-09 13:11