Подтвердить что ты не робот

В чем разница между QQmlApplicationEngine и QQuickView?

Я использую QQmlApplicationEngine следующим образом:

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

app.exec();

Но теперь я хочу включить мультисэмплинг для своего приложения, а QQmlApplicationEngine, похоже, не имеет метода setFormat для включения мультисэмплинга.

Я нашел способ сделать это с QQmlApplicationEngine в форуме:

QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)

Но он полагается на первый корневой объект движка, являющийся QQuickWindow, который не документирован в Qt docs. Поэтому я не хочу использовать эту технику.

Другой способ - пропустить QQmlApplicationEngine и создать вместо него QQuickView. У меня есть метод setFormat, позволяющий включить мультисэмплинг, но мне интересно, я что-то теряю, переключаясь с QQmlApplicationEngine на QQuickView?

Другими словами, каковы различия между этими двумя классами?

Единственное различие, которое я нашел, - это (от здесь):

В отличие от QQuickView, QQmlApplicationEngine не создает автоматически корневое окно. Если вы используете визуальные элементы из Qt Quick, вам необходимо разместить их внутри окна.

Это особое различие для меня не имеет значения.

Любые другие отличия?

4b9b3361

Ответ 1

Заголовок: QQmlApplicationEngine является более новым и мощным, чем QQuickView.

QQmlApplicationEngine предоставляет некоторые ключевые функции приложения для QML, которое QQuickView обычно будет контролировать из С++:

  • Подключение Qt.quit() к QCoreApplication:: quit()
  • Автоматически загружает файлы перевода из каталога i18n, расположенного рядом с основным файлом QML.
  • Автоматически устанавливает инкубационный контроллер, если сцена содержит QQuickWindow.
  • Автоматически устанавливает QQmlFileSelector в качестве перехватчика URL, применяя селектора файлов ко всем файлам и активам QML.

Ссылка: Qt docs

В то время, когда был введен QQmlApplicationEngine, ApplicationWindow, который:

  • похож на обычный QQuickWindow, но добавляет поддержку для установки специфичных для окна меню MenuBar, ToolBar и StatusBar в QML.
  • упрощает добавление элемента заголовка и нижнего колонтитула в окно.
  • позволяет управлять свойствами окна, внешним видом и компоновкой из QML.
  • поддерживает всплывающие окна через свое свойство overlay, которое гарантирует, что всплывающие окна отображаются над другим контентом и что фон затемнен, когда отображается модальное всплывающее окно.

Итак, чтобы использовать некоторые функции Qt Quick Controls, такие как MenuBar и Popup, нам необходимо:

  • используйте ApplicationWindow как элемент QML верхнего уровня вместо Rectangle или Item
  • используйте новый QQmlApplicationEngine для загрузки QML из С++ вместо старого QQuickView.

Ответ 2

Вы можете использовать оба вместе, если вы не хотите, чтобы ваш элемент верхнего уровня был Window.

QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();

Ответ 3

Я - 66-летний пенсионер, более или менее программист-самоучка. И это создает определенные проблемы, потому что меня формально не учили, что все должно быть сделано определенным образом, чтобы быть... правильным.

Тем не менее... Qt Creator и электронная документация по Qt предоставляют БОЛЬШОЙ способ научиться кодировать приложения Qt. Но... одна из вышеупомянутых проблем заключается в том, что иногда примеры, поставляемые с Qt Creator, написаны высокомерными SOB, которым НЕОБХОДИМО ДОКАЗАТЬ, какие они великие программисты, а не предоставлять простые, простые, примеры, которые придерживаются стандарт Hello World, введенный Керниганом и Рити четыре десятилетия назад, когда они были наняты Bell Labs и написали первое издание "языка программирования C" - так я научился кодировать C, прежде чем некоторые из вас читали это. родившийся.

Следовательно, не существует приверженца Hello World примера Qt Charts и QML, который связан с Qt Creator и который содержит ТОЛЬКО файл .pro, ONE.cpp и ONE.qml. Если бы он существовал, я уверен, что он ответил бы на ВСЕ вопросы, задаваемые здесь.