2

我正在尝试运行一个基本程序,该程序通过 c++ 显示一个简单的 qml 文件。加载QQmlEngine等代码如下:

#include <QQmlEngine>
#include <QQmlComponent>
#include <QDebug>
#include <QGuiApplication>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlEngine engine;
    QQmlComponent component(&engine);
    QQuickWindow::setDefaultAlphaBuffer(true);
    component.loadUrl(QUrl("qrc:///qmlFiles/main.qml"));
    if ( component.isReady() )
        component.create();
    else
        qWarning() << component.errorString();
    QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(),SLOT(quit()));
    return app.exec();
}

qml(简化)文件是:

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Dialogs 1.0


ApplicationWindow
{
    width:800
    height:600
    //background: "white"

    visible:true

    function selectFile()
    {
        fileChooser.visible=true;

    }

    menuBar:MenuBar {

            Menu{
                    title:"File"
                    MenuItem{
                        text:"Choose File"
                        shortcut: "Ctrl+F"
                        onTriggered:{
                            selectFile();

                        }
                    }


                    MenuItem {
                        text:"Quit"
                        shortcut: "Ctrl+Q"
                        onTriggered: Qt.quit()
                    }
            }
    }
   FileDialog{
        id:fileChooser
        visible:false
        modality:Qt.WindowModal
        title:"Choose data file"
        onAccepted:{
            console.log(fileChooser.fileUrls)
            visible:false
        }
        onRejected:{
            console.log("Cancel")
            visible:false
        }
    }

}

当我使用 qmlscene 从终端运行文件时,显示的外观与从 c++ 程序运行时不同。

我的猜测是 C++ 实现无法使用特定于平台的东西(例如 QFileDialog)并回退到这些东西的 qml 实现。

我想我需要以不同的方式加载 qml 文件,但是如何加载呢?

4

1 回答 1

1

原来有一些压倒一切的东西QGuiApplication

将其更改为QApplication和在 qmlscene 中一样漂亮。

于 2013-07-09T12:01:49.680 回答