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

Qt5 QuickView cannot create window: no screens are available

本文关键字:屏幕 QuickView 创建 窗口 Qt5      更新时间:2023-10-16

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

#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:错误:无法使用类型为"QQuickItem*"的右值初始化类型为"QObject*"的变量

应该如何做到这一点?

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文件,然后单击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项目将是更明智的选择。