如何处理太多的QML和音频文件

时间:2015-10-28 02:52:27

标签: qt qml gstreamer

我完成了一个Qt Quick UI项目,我正在使用许多QML和音频文件。这是一个儿童的应用程序。在主屏幕中,我有10个部分。一个用于字母(Pismena.qml),第二个用于数字(Cislice.qml)等(Tvary.qml,Farby.qml)。如果您选择某个部分,则可以浏览伴随声音的图像。一节包含大约30个png和30个mp3文件。一切正常。

但是如果我想部署这个应用程序并将这个项目转换为Qt Quick Application项目,我就有问题了。对于三个部分,没关系,但如果我想使用四个部分,我会收到如下错误:

Error: "Internal data flow error." 

Error: "GStreamer encountered a general stream error." 

Error: "Failed to connect stream: Too large"

我启动应用程序时会立即显示这些错误消息,而不是在浏览图像时。 还有一些音频元素没有播放。

这是我的 main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("applicationDirPath", QGuiApplication::applicationDirPath());
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

这是我的 main.qml (它不完整)

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtGraphicalEffects 1.0
import QtQuick.Window 2.0
import QtMultimedia 5.0

ApplicationWindow {
    visible: true
    width: 1024
    height:300

    Rectangle {
        width: parent.width
        height: parent.height
        id: appWindow
        property alias pismenaIconAlias: pismenaIcon

        Pismena{
            id: pismena
            visible: false
        }    

        Cislice{
            id: cislice
            visible: false
        }

        Farby{
            id: farby
            visible: false
        }

        Tvary{
            id: tvary
            visible: false
        }

        Image{
            id: pismenaIcon
            source: "file:" + applicationDirPath + "/obrazky/pismenaIcon.png"           
            MouseArea{
                anchors.fill: parent
                hoverEnabled: true
                onClicked: {
                    parent.visible = false
                    pismena.visible = true

                }                
            }
        }
        Image{
            id: cisliceIcon
            source: "file:" + applicationDirPath + "/obrazky/cisliceIcon.png"
            MouseArea{
                anchors.fill: parent
                hoverEnabled: true
                onClicked: {
                    parent.visible = false
                    cislice.visible = true                   
            }
        }

        Image{
            id: farbyIcon
            source: "file:" + applicationDirPath + "/obrazky/farbyIcon.png"            
            MouseArea{
                anchors.fill: parent
                hoverEnabled: true
                onClicked: {                    
                    parent.visible = false
                    farby.visible = true                    
            }
        }

        Image{
            id: tvaryIcon
            source: "file:" + applicationDirPath + "/obrazky/tvaryIcon.png"            
            MouseArea{
                anchors.fill: parent
                hoverEnabled: true
                onClicked: {                    
                    parent.visible = false
                    tvary.visible = true                    
            }
        }
    }
}

在main.qml文件中,如果您选择Pismena(pismenaIcon Image元素),您将被重定向到该文件 - Pismena.qml ,您可以在其中浏览带有声音的图像:

import QtQuick 2.3
import "myJava.js" as MyScript
import QtMultimedia 5.0
import QtQuick.Window 2.0
Item {
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.verticalCenter: parent.verticalCenter
    Audio {
        id: hrajPismeno

    }
    Image {
        id: pis     
        MouseArea{
            anchors.fill: parent
            onClicked: {
                pis.source = "file:" + applicationDirPath + MyScript.cobr()
                hrajPismeno.source = "file:" + applicationDirPath + MyScript.zobr()
                hrajPismeno.play()

            }
        }
    }
}

这是我的 myJava.js

.pragma library
var pr = 0;
var c = 1;
var z = 1;
var numberOfItems = 33;
var itemFolder = "\/pismena\/";
function cobr(){
    c = (c === numberOfItems) ? 0 : c;
    c = c + 1;
    var s = itemFolder + c + ".png";
    return s;
}
function setLetters(){
    numberOfItems = 33;
    itemFolder = "\/pismena\/";
}
function zobr(){
    z = (z === numberOfItems) ? 0 : z;
    z = z + 1;
    var r = itemFolder + z + ".mp3";
    return r;
}

我在Linux Mint 13上使用Qt 5.3。

为什么我不能使用很多音频文件?

1 个答案:

答案 0 :(得分:1)

Pismena.qml中,您尚未为widthheight设置初始ItemImage。所以在窗口中没有用户可以实际点击的地方。此外,Image元素没有默认路径。

修改

在每个Audio元素中,将autoLoad属性设置为false