Недавно мой руководитель назначил мне один порт Qt и qml. Наш старый проект работает над Qt 4.8 и использует Qt quick 1.0. В Qt4 QML изначально не предоставляет никаких элементов управления графическим интерфейсом по умолчанию, которые можно использовать при создании интерфейса для любой поддерживаемой им операционной системы. Чтобы сэкономить на создании элементов управления, нарисованных владельцем, мы решили использовать проект Qt Components for Desktop в качестве основы для всего нашего графического интерфейса для создания стандартного (и зависимого) внешнего вида на Qt4.8. Компоненты Qt переименованы в Qt Quick Controls и разработаны для Qt5.x. Компоненты Qt предоставляют меню, панель инструментов, кнопку. Поэтому я удаляю компоненты Qt, потому что в Qt5.x есть ApplicationWindow.
файл main.qml:
import QtQuick.Controls 1.0
ApplicationWindow {
title: "My Application"
Button {
text: "Push Me"
anchors.centerIn: parent
}
}
Файл Main.cpp:
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine("main.qml");
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
if ( !window ) {
qWarning("Error: Your root item has to be a Window.");
return -1;
}
window->show();
return app.exec();
}
Но в нашем старом проекте в функции main у нас есть одна MainWindow
, которая реализует главное окно, находит main.qml
и создает QDeclarativeView
с main.qml
в качестве источника.
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
……
}
В конструкторе MainWindow
:
#include <QApplication>
#include <QQmlApplicationEngine>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
……
DeclarativeView* pView = new DeclarativeView;
setCentralWidget(pView);
……
}
Declarativeview реализует класс DeclarativeView
, который наследует QDeclarativeView
и сохраняет указатель на своего родителя QWidget
. MainWindow
может динамически изменять меню. При щелчке по одному элементу меню будет создан один диалог, который определяется файлом qml или файлом Qt ui.
Теперь я закончил всю работу по изучению файла Qml, заменил компоненты Qt на QtQuick.Controls 1.0. Но я не знаю, как я использую QQmlApplicationEngine
для загрузки моего файла и динамического изменения меню, загружаю вам виджет класса qt ui, использую QQuickWindow
для загрузки нового файла qml и открытия нового окна.
Думаю, нам не нужно использовать этот виджет в моем новом проекте. Не могли бы вы мне помочь? Всем большое спасибо.