[Interest] Embedding a QTextBrowser in a QML application: QObject: Cannot create children for a parent that is in a different thread

Jeffrey Brendecke jeffrey.brendecke at gmail.com
Wed Mar 30 03:03:12 CEST 2022


For an app I am working on I need a component for displaying HTML rich text. TextEdit does not provide an important feature I need present in QTextEdit and QTextBrowser: scrollToAnchor( const QString& ).

The app will have to work on iOS, so WebEngine is out of the question, and I would not want to have all the overhead of having a web browser in the app anyways.

Given the text itself is fairly simple (no images, just formatted text), QTextBrowser gives me what I need.

I have been looking into trying to embed a QTextBrowser into a QML application using the approach in this project:

https://www.alex-spataru.com/blog/using-qt-widgets-in-your-qmlqtquick-applications <https://www.alex-spataru.com/blog/using-qt-widgets-in-your-qmlqtquick-applications>. (QmlPlainTextEdit)

A similar approach is used here:

https://github.com/mosolovsa/qmlplot <https://github.com/mosolovsa/qmlplot>


This involves:
* Creating a class deriving from QQuickPaintedItem
* Encapsulating an instance of QTextBrowser instantiated with a nullptr parent as a member in that class
* Rendering from the QTextBrowser into the QQuickPaintedItem derivative
* Hooking up the necessary events between the QQuickPaintedItem and the QTextBrowser instance

That all seems to be no problem. The problem I get results in a segmentation fault:

“””
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x5617e2ebed80), parent's thread is QThread(0x5617e2958860), current thread is QSGRenderThread(0x5617e2d18400)
“”"

The crash occurs after passing the URL to open via QTextBrowser::setSource( const QUrl&, QTextDocument::ResourceType ) though not immediately.

Note: I am using Qt 6.3.0-rc on Kubuntu Linux 21.10.

The qmlplot application will compile and run on Qt 5.15.8 (with warnings) but not on 6.3.0-rc (lots of errors and warnings). However, it does not involve a widget containing an instance of QTextDocument. I have not tried the code directly in QmlPlainTextEdit, but I did notice the source sites are no longer available.

I am aware that, assuming this can be made to work, that performance may be CPU intensive especially with antialiasing, but I wanted to give it a try before looking into alternatives.

Thanks very much in advance!

Sincerely,

Jeffrey Brendecke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20220330/98be0626/attachment.htm>


More information about the Interest mailing list