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

C++ Qt5 QuickView无法创建窗口:没有可用的屏幕,c++,qt,qml,qt5,qquickview,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")); QObjec

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

#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();
}
#包括
#包括
int main(int argc,char*argv[]){
QCore应用程序应用程序(argc、argv);
QQuickView视图;
view.setSource(QUrl::fromLocalFile(“app.qml”);
QObject*对象=(QObject*)视图。根对象();
view.show();
删除对象;
返回app.exec();
}
无法创建窗口:没有可用的屏幕

程序意外地完成了

我能在网上找到的关于该错误的所有信息都是由特定条件引起的bug报告,这些条件比上面提到的要复杂得多

<> >代码> App.QML < /Cord>是一个运行良好的文件,即没有上面的C++,并且在一个单独的项目中配置为“Qt快速UI”。给出它的
qrc://
路径,或者故意指定一个不存在的文件都没有效果

注意
QObject*
cast-这在中不存在,但没有:

/main.cpp:11:错误:无法使用“QQuickItem*”类型的右值初始化“QObject*”类型的变量


如何实现这一点?

QCoreApplication可以与控制台应用程序一起使用,而不是与GUI应用程序一起使用,也就是说,您必须使用
QGuiApplication
对象。在我看来,您创建了一个控制台应用程序而不是图形应用程序

您可以通过
Qt快速应用程序
创建适当的应用程序,将“app.qml”作为资源添加到该项目中,并调用这样的文件,而不是项目模板提供的默认“main.qml”


如果要快速修复当前项目,只需检查.pro文件是否设置为导入GUI库:

QT += gui qml quick
将qml文件设置为资源:

  • 通过
    文件->新建文件或项目…->创建新的资源文件Qt->Qt资源文件
  • 右键单击新创建的
    .qrc
    文件,然后单击
    添加现有文件
    添加“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();
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    QGUI应用程序a(argc,argv);//GUI应用程序!!!
    QQuickView视图;
    view.setSource(QUrl(QStringLiteral)(“qrc:///app.qml")));
    view.show();
    返回a.exec();
    }
    

    然而,选择
    Qt快速应用程序
    项目将是更明智的选择。

    注意:为了拥有主机操作系统的本机风格,请使用
    QApplication
    而不是
    QGuiApplication
    。这一点很好。但是,对于不使用
    QWidget
    派生类的QML应用程序,
    QGuiApplication
    应该是首选,因为它不依赖于
    QtWidgets
    库。好的。这就是我所记得的:不确定这是否仍然适用。我明白了,顺便说一句,我以前相信过你的话!从图库示例的
    .pro
    文件中,我们看到:
    !安卓:!ios:!blackberry:qtHaveModule(小部件):QT+=widgets
    。现在的问题是:平台被删除是因为没有提供默认样式,或者样式(将)添加到
    QtQuickControls
    ?可能是第一个。你知道吗?我将尽快在Android上用5.4.0 RC试用该示例:RC示例具有代码
    !没有桌面:QT+=widgets
    。删除该行会在我的Windows机器上产生默认的L&F,而我的4.4设备有一种很好的
    Android
    感觉(不同于5.3)。Pretty必须解决:按照示例,使用
    .pro
    文件中的上面一行,然后使用
    QT\u WIDGETS\u LIB
    导入/使用
    QGuiApplication
    QApplication
    。可能桌面主题仍将绑定到小部件库,我不知道这一点。然而,对桌面环境有这样的依赖并不是那么可怕。