[Interest] QML ApplicationWindow fails to open a window
Juan Navarro
oneorjuan at gmail.com
Mon May 26 16:14:46 CEST 2014
Oh My God, that's a shameful way of doing a first post. Obviously, my
QQmlApplicationEngine is getting destroyed after falling outside the
scope of MainWindow destructor. Glad nobody read this, right? :-) I
guess today's being a bad day already. Sorry for the noise!
On Mon, May 26, 2014 at 4:06 PM, Juan Navarro <oneorjuan at gmail.com> wrote:
> Sorry I forgot to indicate that I'm using latest Qt release, installed
> from the official Qt 5.3 online installer, using Ubuntu 14.04.
>
> On Mon, May 26, 2014 at 4:04 PM, Juan Navarro <oneorjuan at gmail.com> wrote:
>> Hi there;
>> i'm struggling with the behavior of ApplicationWindow and I found that
>> it only opens a window when used directly from main() but not from a
>> custom class. Let's explain with an example:
>>
>> ----
>> main.qml:
>> import QtQuick 2.2
>> import QtQuick.Controls 1.1
>>
>> ApplicationWindow {
>> visible: true
>> width: 640
>> height: 480
>>
>> Text {
>> text: "Hello World"
>> anchors.centerIn: parent
>> }
>> }
>> ----
>> main.cpp:
>> #include <QApplication>
>> #include <QGuiApplication>
>> #include <QQmlApplicationEngine>
>> #include <QObject>
>> #include <QWidget>
>> #include <QUrl>
>>
>> class MainWindow1
>> {
>> public:
>> MainWindow1()
>> { QQmlApplicationEngine engine("main.qml"); }
>> };
>>
>> class MainWindow2 : public QObject
>> {
>> public:
>> MainWindow2(QObject* parent = 0)
>> : QObject(parent)
>> { QQmlApplicationEngine engine("main.qml"); }
>> };
>>
>> class MainWindow3 : public QWidget
>> {
>> public:
>> MainWindow3(QWidget* parent = 0, Qt::WindowFlags flags = 0)
>> : QWidget(parent, flags)
>> { QQmlApplicationEngine engine("main.qml"); }
>> };
>>
>> int main(int argc, char *argv[])
>> {
>> QApplication app(argc, argv);
>>
>> // MainWindow1 window;
>> // MainWindow2 window;
>> // MainWindow3 window;
>> QQmlApplicationEngine engine("main.qml");
>>
>> return app.exec();
>> }
>> ----
>>
>> Check the main() function: only with the uncommented code I get to see
>> a new Window which shows the "Hello World" text. If we comment that
>> and uncomment any of the other 3 options, which use a custom
>> "MainWindow" class, then nothing will come out. I derived MainWindow
>> from QObject and QWidget in hopes to find some solution, but I
>> actually would think that a standalone MainWindow class should suffice
>> for this basic usage scenario.
>>
>> Is it a bug or I am misusing this class?
>>
>> Also, extracting the inner QQuickWindow and forcing a call to show()
>> doesn't work; ie:
>> MainWindow1()
>> {
>> QQmlApplicationEngine engine("main.qml");
>> Q_ASSERT(engine.rootObjects().size() > 0);
>> QQuickWindow* window =
>> qobject_cast<QQuickWindow*>(engine.rootObjects().at(0));
>> window->show();
>> }
>> doesn't work.
More information about the Interest
mailing list