Qt QQmlApplicationEngine拒绝显示QML代码

6
我有这个pro文件。
QT += qml quick widgets
TARGET = sPassKeeper
include(src/src.pri)
include(qml/qml.pri)
RESOURCES += \
    resources.qrc

在src.pri和qml.pri中,只有单行代码。

OTHER_FILES += \
    qml/main.qml

src.pri

SOURCES += \
    src/main.cpp

在main.cpp中有以下代码
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine(QUrl("qrc:/new/prefix1/qml/main.qml"));
    qDebug() << "Ok engine created";
//    Q_UNUSED(engine)
    return app.exec();
}

main.qml

import QtQuick 2.0
import QtQuick.Controls 1.1

ApplicationWindow{
    title: "sPassKeeper"
    Button{
        text: "Hello"
    }
}

结果获得此输出

QML调试已启用。 只在安全环境中使用。 好的引擎已创建

没有显示任何内容,进程未完成。

3个回答

9
您缺少了这个:
ApplicationWindow {
    visible: true

Qt Creator的新项目向导(新建文件或项目... > Qt Quick应用程序)有一个步骤,您需要选择组件集(选择Qt Quick组件集)。如果您选择了Qt Quick Controls(这是必需的,才能使用ApplicationWindow),Creator会为您生成正确的代码。

import QtQuick 2.2
import QtQuick.Controls 1.1

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    menuBar: MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Exit")
                onTriggered: Qt.quit();
            }
        }
    }

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

谢谢。你的回答更漂亮了一些。 - tty6

2

您需要从引擎创建的对象中创建QQuickWindow。这是我关于此的项目中的代码片段

  engine.load(QUrl(QString(String_val(_qmlpath))));
  QList<QObject*> xs = engine.rootObjects();
  if (xs.count() == 0) {
    Q_ASSERT_X(false, "Creating C++ runtime", "Your QML file seems buggy");
  }
  QQuickWindow *window = qobject_cast<QQuickWindow*>(xs.at(0) );
  window->showMaximized();
  app.exec();

非常好的回答。谢谢。 - tty6
抱歉,但我不同意这是一个好答案。它可能解决了问题,但正确的解决方案要简单得多,而且不那么hacky。请看我的答案。 - Mitch

0

如果你想在全屏模式下显示根对象 (WindowApplicationWindow),则可以按照以下步骤进行:

import QtQuick.Window 2.3
import QtQuick.Controls 2.2

ApplicationWindow {
    visible: true
    visibility: Window.FullScreen
}

visibility 可能有用的值包括:Window.FullScreenWindow.Windowed


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接