我完成了一个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。
为什么我不能使用很多音频文件?
答案 0 :(得分:1)
在Pismena.qml
中,您尚未为width
和height
设置初始Item
和Image
。所以在窗口中没有用户可以实际点击的地方。此外,Image
元素没有默认路径。
修改强>
在每个Audio
元素中,将autoLoad
属性设置为false
。