Qt5 QuickView无法创建窗口:没有可用的屏幕

时间:2014-10-24 19:11:05

标签: c++ qt qml qt5 qquickview

每当我尝试运行以下代码时,都会收到此错误(标题,如下所示):

#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&#39;。给它qrc://路径,或故意指定一个不存在的文件没有效果。

请注意QObject*广告投放 - 这在the docs中不存在,但没有它:

  

/main.cpp:11:error:无法初始化类型&#39; QObject *&#39;的变量。使用类型&#39; QQuickItem *&#39;

的右值

应该怎么做?

1 个答案:

答案 0 :(得分: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. 创建新的资源文件
  3. 右键单击新创建的.qrc文件,然后点击add existing file添加“app.qml”文件
  4. 最后,像这样重写你的主要:

    #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项目将是更明智的选择。