如何更改QtQuick 2窗口的标题?

时间:2013-10-03 13:02:27

标签: c++ qt

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

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。

2 个答案:

答案 0 :(得分:11)

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

Qt5.1,仅适用于桌面

如果你有Qt5.1,你可以使用ApplicationWindow中的新QtQuick.Controls项作为root对象,名为 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();
}

这应该打开一个带有文本&#34; Hello World!&#34;。

的窗口

答案 1 :(得分:0)

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

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();
}