使用QML做为播放器的前端,还是有许多QT不能比的效果哦..
界面:
今天搞了一下文件路径的问题, 发现MediaPlay好多格式的视频播不了, 真心蛋疼...
难怪大家都选择QML+VLC做为视频播放的后台..通过这个小例子,了解一下视频播放的路径的切换方法.
点击open会打开一个文件选择框. 选择你想要播放的视频就OK了..
通过这种方式定义了一个属性. 我是当变量来用了..
property string path : "file:///c:/test1.avi"
文件对话框的定义:
FileDialog {
id: fileDialog
title: "Please choose a file"
onAccepted: {
path = fileDialog.fileUrls[0].toString();
console.log("You chose: ",path)
mediaPlayer.source = path
}
onRejected: {
console.log("Canceled")
}
}
全部代码如下:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtMultimedia 5.4
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
visible: true
property string path : "file:///c:/test1.avi"
MediaPlayer {
id: mediaPlayer
source: path
autoPlay: true
}
Rectangle {
color: "black"
anchors.fill: parent
VideoOutput {
id: video
anchors.fill: parent
source: mediaPlayer
}
}
Rectangle {
id: progressBar
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins: 0
height: 10
color: "lightGray"
Rectangle {
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: mediaPlayer.duration>0?parent.width*mediaPlayer.position/mediaPlayer.duration:0
color: "darkGreen"
}
MouseArea {
property int pos
anchors.fill: parent
onClicked: {
if (mediaPlayer.seekable)
pos = mediaPlayer.duration * mouse.x/width
mediaPlayer.seek(pos)
}
}
}
FileDialog {
id: fileDialog
title: "Please choose a file"
onAccepted: {
path = fileDialog.fileUrls[0].toString();
console.log("You chose: ",path)
mediaPlayer.source = path
}
onRejected: {
console.log("Canceled")
}
}
menuBar: MenuBar {
Menu {
title: qsTr("&File")
MenuItem {
text: qsTr("&Open")
onTriggered: {
fileDialog.open()
}
}
MenuItem {
text: qsTr("E&xit")
onTriggered: Qt.quit();
}
}
}
MainForm {
anchors.fill: parent
button1.visible: false
button2.visible: false
button3.visible: false
button2.onClicked: messageDialog.show(qsTr("Button 2 pressed"))
button3.onClicked: messageDialog.show(qsTr("Button 3 pressed"))
button1.onClicked: {
}
}
MessageDialog {
id: messageDialog
title: qsTr("May I have your attention, please?")
function show(caption) {
messageDialog.text = caption;
messageDialog.open();
}
}
}