Qt5 QuickView не может создать окно: нет доступных экранов

Я получаю эту ошибку (название, ниже) всякий раз, когда я пытаюсь запустить следующий код:

#include <QCoreApplication>
#include <QQuickView>

int main(int argc, char *argv[]){
QCoreApplication app(argc, argv);

QQuickView view;
view.setSource(QUrl::fromLocalFile("app.qml"));
QObject *object = (QObject*)view.rootObject();

view.show();

delete object;
return app.exec();
}

Невозможно создать окно: нет доступных экранов

Программа неожиданно завершилась.

Все, что я могу найти в Интернете для этой ошибки, — это сообщения об ошибках, возникающих из-за более сложных условий, чем описанные выше.

app.qml это файл, который работает нормально один, то есть без вышеупомянутого C ++ и в отдельном проекте, настроенном как «Qt Quick UI». Давая это qrc:// путь или намеренное указание несуществующего файла не имеет никакого эффекта.

Обратите внимание QObject* бросили — этого не было в документы, но без этого

/main.cpp:11: ошибка: невозможно инициализировать переменную типа ‘QObject *’ с помощью значения r типа QQuickItem *

Как это должно быть сделано?

0

Решение

QCoreApplication можно использовать с консольное приложение, не с GUI, то есть вы должны использовать QGuiApplication объект. Мне кажется, что вы создали консольное приложение вместо графического.

Вы можете создать правильное приложение через Qt Quick Applicationдобавьте ваш «app.qml» в качестве ресурса к этому проекту и вызовите такой файл вместо файла по умолчанию «main.qml», предоставленного шаблоном проекта.


Если вы хотите быстро исправить свой текущий проект, просто убедитесь, что .pro-файл настроен на импорт библиотек графического интерфейса:

QT += gui qml quick

Установите ваш qml-файл в качестве ресурса:

  1. Создать новый файл ресурсов через file -> new File or Project... -> Qt -> Qt Resource File
  2. Щелкните правой кнопкой мыши по вновь созданному .qrc файл и нажмите add existing file добавить свой файл «app.qml»

Наконец, переписать ваш основной как это:

#include <QQuickView>
#include <QGuiApplication>

int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);    // GUI APPLICATION!!!
QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:///app.qml")));
view.show();
return a.exec();
}

Тем не менее, идя за Qt Quick Application Проект будет более разумным выбором.

2

Другие решения


По вопросам рекламы [email protected]