8

我正在尝试更改我的项目的默认窗口,但它不起作用。我正在使用 QtQuick 2.0。尝试导入 QtQuick.Window 2.0 并将 Window{} 作为根对象而不是 Rectangle{} 但它不允许将窗口对象作为根。它给了我以下错误:

QQuickView only supports loading of root objects that derive from QQuickItem. 

If your example is using QML 2, (such as qmlscene) and the .qml file you 
loaded has 'import QtQuick 1.0' or 'import Qt 4.7', this error will occur. 

To load files with 'import QtQuick 1.0' or 'import Qt 4.7', use the 
QDeclarativeView class in the Qt Quick 1 module.

关于如何更改窗口标题的任何想法?我正在使用 Qt 5.1.1。

4

2 回答 2

13

这取决于您希望如何使用您的 GUI。如果您想将 QML 用于几乎所有事情,从窗口创建到窗口中的元素,以下解决方案可能是您的最佳选择。

Qt5.1,仅适用于桌面

如果您有 Qt5.1,您可以使用 QtQuick.Controls 中的新ApplicationWindow项作为名为 main.qml 的文件中的对象

import QtQuick 2.0
import QtQuick.Controls 1.0

ApplicationWindow {
    visible: true
    width: 360
    height: 360
    title: "MyWindow"

    Text {
        text: "Hello world!"
        anchors.centerIn: parent
    }
}

为避免您收到错误消息,您需要使用QQmlApplicationEngine而不是QQuickView来启动您的应用程序。这可以在您的main.cpp文件中按如下方式完成:

#include <QtGui/QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{    
    QGuiApplication app(argc, argv);    
    QQmlApplicationEngine engine("main.qml");    
    return app.exec();
}

Qt5.0,(可能)用于桌面以外的环境

如果您不适合使用 Qt5.1,或者您的目标设备尚不支持 QtQuick.Controls,则另一种方法是按以下方式使用Window。将此添加到main.qml

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    width: 360
    height: 360
    title: "MyWindow"

    Text {
        text: "Hello world!"
        anchors.centerIn: parent
    }
}

让它成为你的main.cpp

#include <QtGui/QGuiApplication>
#include <QQmlEngine>
#include <QQmlComponent>

int main(int argc, char *argv[])
{    
    QGuiApplication app(argc, argv);    
    QQmlEngine engine;
    QQmlComponent component(&engine, QUrl::fromLocalFile("main.qml"));
    component.create();    
    return app.exec();
}

这应该会打开一个带有文本“Hello World!”的窗口。

于 2013-10-03T15:07:35.117 回答
2

Qt 5.1.1 附带的“Qt Quick Controls - Gallery”示例提供了一个很好的示例。以下代码假定项目结构基于“Qt Quick 2 应用程序(内置类型)”模板。

main.qml中,使用:

ApplicationWindow {
    title: "Component Gallery"
...

main.cpp中,使用:

#include <QtQml>
#include <QtQuick/QQuickView>
#include <QtCore/QString>
#include <QtWidgets/QApplication>
#include "qtquick2applicationviewer.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine("qml/YourProject/main.qml");
    QObject* topLevel = engine.rootObjects().value(0);
    QQuickWindow* window = qobject_cast<QQuickWindow*>(topLevel);
    window->show();
    return app.exec();
}
于 2013-12-03T18:14:27.537 回答