2014-10-24 2 views
0

Я получаю эту ошибку (название, ниже) всякий раз, когда я пытаюсь запустить следующий код: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(); 
} 

Cannot create window: no screens available

The program has unexpectedly finished.

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

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

Обратите внимание на QObject* бросок - это не было в the docs, но без него:

/main.cpp:11: error: cannot initialize a variable of type 'QObject *' with an rvalue of type 'QQuickItem *'

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

ответ

2

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

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


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

QT += gui qml quick 

Установите файл QML как ресурс:

  1. Создайте новый файл ресурсов через file -> new File or Project... -> Qt -> Qt Resource File
  2. Щелкните правой кнопкой мыши только что созданный файл .qrc и нажмите. 0 добавить свой файл «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 будет мудрее выбор.

+1

Примечание: для того, чтобы иметь собственный стиль операционной системы хоста, используйте 'QApplication' вместо' QGuiApplication'. – mozzbozz

+1

Хорошая точка. Однако для приложений QML, не использующих классы, основанные на QWidget, предпочтение отдается QGuiApplication, поскольку он не имеет зависимостей от библиотеки QtWidgets. – BaCaRoZzo

+0

Хорошо, право - еще не знаю, что еще :) Итак, с 'QtWidgets'-зависимостями вы имеете в виду QtQuick-'Button',' TextField' и т. Д.? – mozzbozz

 Смежные вопросы

  • Нет связанных вопросов^_^