如何在 QML 中显示来自 QTextDocument 的分页文本?
How to show paginated text from a QTextDocument in QML?
我目前有一个从QQuickPaintedItem
继承的C++类。我用它来通过QTextDocument::drawContents
(或通过直接调用其QTextDocumenLayout的draw
方法)从QTextDocument
绘制布局,分页的富文本。
但是,如QQuickPaintedItems
文档中所述,需要注意一些线程问题:
警告:在此函数中创建 QObject、发出信号、启动计时器等时必须格外小心,因为这些将与渲染线程具有关联性。
具体来说,在这种情况下,QTextDocumentLayoutPrivate
有计时器,这些计时器在调用QTextDocumenLayout::draw
时启动/停止。不幸的是,QTextDocument
和计时器位于 qml 主线程中,而paint
在渲染线程中调用,导致类似
QBasicTimer::start:计时器不能从另一个线程启动
虽然这不会影响我的应用程序的功能(到目前为止),但这可能不是一件好事™。
因此,我的问题是是否有更好的方法来在QML中显示分页文本(不一定涉及QQuickPaintedItem
)。
现在我仍在使用QQuickPaintedItem
,当调用paint
时,我执行以下操作:
-
首先检查
QTextDocument
是否将其相关性设置为其当前线程。如果是,我将照常进行。 -
否则,
QMetaObject::invokeMethod
用于调用将文档移动到呈现线程的方法,并调用update
以触发重绘,现在,重绘工作,因为线程相关性是正确的。在paint
结束时,QTextDocument
的线程亲和力被设置回原始线程。
据我所知,这是有效的(如,没有更多的警告),但在概念上感觉相当错误。
- 是默认情况下分配给char数组常量的值
- QTableView:endMoveRows在模型中重置水平页眉大小
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 在C++中将变量 wstring 分配给 Char 数组
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 堆分配对于大型块中的分页是否更有效?
- 如何在 QML 中显示来自 QTextDocument 的分页文本?
- 动态表中的 SQLite 分页
- 如果我剩下大量RAM,会发生记忆分页
- 如何在C++应用程序中支持输出分页
- 使用写入函数对 int 表进行分页
- list.h list_del() 给出内核分页错误
- 时钟分页替换算法
- 提升::几何 R*树和分页/延迟加载
- 如何设置QSqlQueryModel的Qt::Vertical headerData在进行分页时增加数字
- 什么会导致分页池增加
- 数组内存分配-分页
- 如何使用std::vector等动态数据结构并防止分页
- 如何防止分页在QTextDocument块或框架
- 使用控制台进行分页