Solved Porting a custom widget to QML (in a way that's embeddable into QMainWindow)?
-
A total QML newbie here, never touched the thing. I have a simple Qt Widgets application that I want to port to Android (while retaining the current desktop functionality and native looks). It compiles and runs on Android as is, although naturally it has lots of bugs there. I could polish it and keep Widgets, but I want to do it the right way - with Qt Quick 2.
Now, the main problem I'm facing is one widget. It basically paints text and background using specific colors. But it also paints two lines and it can perform fade-out animation on the text (blend into background). Here's the source code, it really is a small piece of code.
What should I do with it to replicate this functionality in a "native" Qt Quick Android app while avoiding duplicating this widget in mobile and desktop versions of the program?
Initially I was going to create a QML app from scratch (new thin UI over the same core code) and embed the existing widget there, but apparently it's no longer possible as of Qt Quick 2.0. Can I do the other way around - port this functionality to QML and embed it into QMainWindow? Is there an example that does something similar? Can you name me some keywords I should search for to understand what I need to do?Thanks in advance.
-
Hi! Porting your custom widget to Qt Quick is easy. You can keep almost all of the code. Just, instead of inheriting from QWidget, inherit from QQuickPaintedItem, override
void QQuickPaintedItem::paint(QPainter *painter)
and move your code fromvoid CReaderView::paintEvent(QPaintEvent*)
to that method. -
@Wieland
That is very interesting, thank you, going to try it right now.But what about re-using it in the desktop
QMainWindow
-based app? It's not the main piece of code in the app, but certainly the main UI element with some logic inside, I would strongly prefer NOT having to duplicate it. -
Embedding Qt Quick GUIs into QWidget-base GUIs is easy, too. There is a "container widget" - QQuickWidget - that is made exactly for this purpose.
-
Is it OK to use
QPixmap
in myQQuickPaintedItem
implementation? -
@Violet-Giraffe sure
-
This post is deleted!