2014-07-05 59 views
3

我有这个亲文件Qt的QQmlApplicationEngine拒绝显示QML代码

QT += qml quick widgets 
TARGET = sPassKeeper 
include(src/src.pri) 
include(qml/qml.pri) 
RESOURCES += \ 
    resources.qrc 

SRC PRI和QML 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调试启用。只能在安全的环境中使用。好吧 引擎创建

没有显示,处理没有完成。

回答

4

你缺少这样的:

ApplicationWindow { 
    visible: true 

Qt Creator的新项目向导(New File or Project... > Qt Quick Application)具有这样你选择的组件集步骤(Select Qt Quick Component Set) 。如果选择的Qt快速控制(其需要为了使用ApplicationWindow),创作者为您生成正确的代码:

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 
    } 
} 
+0

谢谢。你的答案有点漂亮 – tty6

2

您需要从引擎创建的对象创建QQuickWindow。这是一个peace of code从我的项目看:

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(); 
+0

很好的答案。谢谢。 – tty6

+0

对不起,但我不同意这是一个很好的答案。它可以解决这个问题,但正确的解决方案要简单得多,而且不那么简单。请看我的答案。 – Mitch

0

如果想在foolscreen模式中显示根对象(WindowApplicationWindow),则可以做到以下几点:为visibility

import QtQuick.Window 2.3 
import QtQuick.Controls 2.2 

ApplicationWindow { 
    visible: true 
    visibility: Window.FullScreen 
} 

可能有用的值是:Window.FullScreenWindow.Windowed