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

2022-03-30 Thread joao morgado via Interest
 Hi
I did something like that using Flickable, like Shawn is sugesting, works very 
well. Only I didnt have the need to use scrollToAnchor(...), but indeed using 
contentY, seems like the best option I can remember.
CheersJoão
Em quarta-feira, 30 de março de 2022 09:55:38 GMT+1, Shawn Rutledge 
 escreveu:  
 
 


On 2022 Mar 30, at 03:03, Jeffrey Brendecke  wrote:
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& ).

So you went and wrote up a feature request at bugreports.qt.io about that, 
first thing, right?  ;-)  Please do, because we know that Qt Quick cannot be 
taken seriously for desktop development unless we add missing features like 
this over time; and that’s really a goal.
Since TextEdit doesn’t have scrolling built-in (the separation of concerns 
principle was followed there at least), you’d need to put it in a Flickable, 
and then you’d need a way to find the y coordinate of the anchor location so 
that you can set Flickable’s contentY.  And we don’t have API for dealing with 
anchors AFAIK.  Probably we should, but it needs a bit of brainstorming about 
what that should look like; e.g. we could have a function to look up the 
position by name, like anchorPosition(string); but maybe you first need a list 
of anchors.  (Even the name could be a matter for discussion since “anchors” 
usually mean something different in Qt Quick.)  If you are getting a list, 
should it be only a QStringList or should we provide all the necessary 
information at once, somehow?  QVariantList?  Or would a QAIM be useful?  
Something like 
https://code.qt.io/cgit/qt/qtwebengine.git/tree/src/pdf/qpdflinkmodel_p.h but 
maybe that’s overkill for this case.  Anyway if you wanted to show a sidebar 
with a “table of contents” or list of link destinations (ListView or TreeView?) 
some sort of model would be useful.  (I will soon try to use TreeView in QtPDF, 
although in that context, links and bookmarks are different things.)  Even 
better if the same model could be used both in Quick and widget-based 
applications; maybe it could be done if it would work only with QTextDocument 
and QTextLayout objects, and the view’s job is to keep it updated whenever the 
text layout is done or redone; but I’m not sure.  Having complete information 
about anchors and their locations at startup would be in conflict with the idea 
of doing text layout lazily, to save time and memory when the text is large 
(like a document containing a whole book).
Does anybody have any better ideas?

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.
 (QmlPlainTextEdit)
A similar approach is used here:
https://github.com/mosolovsa/qmlplot

Data visualization with QPainter…  I guess they don’t expect real-time…

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)“”"

I’d have to use the debugger to understand what threads are involved and where 
is this child being created from, but yes thread ownership of objects is a 
thing.  https://doc.qt.io/qt-6/qobject.html#moveToThread or try to figure out 
how to get the child creation into the correct thread, or...
You could alternatively go the other way around: write a widget application and 
use QQuickWidget for the Quick contents.  (Hopefully only one of those.) And 
perhaps run into different bugs… but we are porting QQuickWidget to RHI for 
6.4, and hopefully looking at some old bugs there while we’re at it.
___
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest
  ___
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest


[Interest] QWebView – make URL line invisible

2022-03-30 Thread Alexander Carôt
Hi all,

I am new to using QWebView and currently play with the minibrowser example.

Now I wonder in how far the browser window can be modified/customized.

On application lauch I basically want to automatically retrieve a predefined 
website without offering alternatives to the user. Thus I do not need the URL 
line and wonder if it can be made invisible ?

Thanks in advance,
best

Alex

--
http://www.carot.de
Email : alexan...@carot.de
Tel.: +49 (0)177 5719797

___
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest


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

2022-03-30 Thread Shawn Rutledge


On 2022 Mar 30, at 03:03, Jeffrey Brendecke 
mailto:jeffrey.brende...@gmail.com>> wrote:

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& ).

So you went and wrote up a feature request at 
bugreports.qt.io about that, first thing, right?  ;-)  
Please do, because we know that Qt Quick cannot be taken seriously for desktop 
development unless we add missing features like this over time; and that’s 
really a goal.

Since TextEdit doesn’t have scrolling built-in (the separation of concerns 
principle was followed there at least), you’d need to put it in a Flickable, 
and then you’d need a way to find the y coordinate of the anchor location so 
that you can set Flickable’s contentY.  And we don’t have API for dealing with 
anchors AFAIK.  Probably we should, but it needs a bit of brainstorming about 
what that should look like; e.g. we could have a function to look up the 
position by name, like anchorPosition(string); but maybe you first need a list 
of anchors.  (Even the name could be a matter for discussion since “anchors” 
usually mean something different in Qt Quick.)  If you are getting a list, 
should it be only a QStringList or should we provide all the necessary 
information at once, somehow?  QVariantList?  Or would a QAIM be useful?  
Something like 
https://code.qt.io/cgit/qt/qtwebengine.git/tree/src/pdf/qpdflinkmodel_p.h but 
maybe that’s overkill for this case.  Anyway if you wanted to show a sidebar 
with a “table of contents” or list of link destinations (ListView or TreeView?) 
some sort of model would be useful.  (I will soon try to use TreeView in QtPDF, 
although in that context, links and bookmarks are different things.)  Even 
better if the same model could be used both in Quick and widget-based 
applications; maybe it could be done if it would work only with QTextDocument 
and QTextLayout objects, and the view’s job is to keep it updated whenever the 
text layout is done or redone; but I’m not sure.  Having complete information 
about anchors and their locations at startup would be in conflict with the idea 
of doing text layout lazily, to save time and memory when the text is large 
(like a document containing a whole book).

Does anybody have any better ideas?

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.
 (QmlPlainTextEdit)

A similar approach is used here:

https://github.com/mosolovsa/qmlplot

Data visualization with QPainter…  I guess they don’t expect real-time…

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)
“”"

I’d have to use the debugger to understand what threads are involved and where 
is this child being created from, but yes thread ownership of objects is a 
thing.  https://doc.qt.io/qt-6/qobject.html#moveToThread or try to figure out 
how to get the child creation into the correct thread, or...

You could alternatively go the other way around: write a widget application and 
use QQuickWidget for the Quick contents.  (Hopefully only one of those.) And 
perhaps run into different bugs… but we are porting QQuickWidget to RHI for 
6.4, and hopefully looking at some old bugs there while we’re at it.

___
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest