Как изменить заголовок окна QtQuick 2?

Я пытаюсь изменить окно по умолчанию моего проекта, но это не работает. Я использую QtQuick 2.0. Попытался импортировать QtQuick.Window 2.0 и сделать Window{} корневым объектом вместо Rectangle{}, но он не позволяет использовать оконные объекты как root. Это дает мне следующие ошибки:

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.


person adi    schedule 03.10.2013    source источник


Ответы (2)


Это зависит от того, как вы хотите использовать свой графический интерфейс. Если вы хотите использовать QML почти для всего, от создания окон до элементов в ваших окнах, следующее решение может быть лучшим вариантом для вас.

Qt5.1, только для десктопа

Если у вас Qt5.1, вы можете использовать новый ApplicationWindow элемент из QtQuick.Controls в качестве корневого объекта в файле с именем 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!».

person dragly    schedule 03.10.2013

Пример "Qt Quick Controls - Gallery", поставляемый с Qt 5.1.1, является хорошим примером. Следующий код предполагает структуру проекта, основанную на шаблоне «Qt Quick 2 APPlication (Built-in Types)».

В 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();
}
person Edward Brey    schedule 03.12.2013