2014-07-05 83 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