使用 FileDialog 时在 QML 中循环
Posted
技术标签:
【中文标题】使用 FileDialog 时在 QML 中循环【英文标题】:Loop in QML when using FileDialog 【发布时间】:2018-08-03 11:30:47 【问题描述】:我的循环有问题。我正在尝试从浏览器文件加载 img 并在 3 秒内将其他人显示为图像 - 幻灯片。我使用了while循环
FileDialog
id: fileDialog
visible: false
title: "Choose a file"
property url defaultz: "E:\IMG"
folder: defaultz
selectMultiple: true
nameFilters: [ "Image files (*.jpg *.png *.bmp)", "All files (*)" ]
onAccepted:
console.log("You chose: " + fileDialog.fileUrls)
console.log(fileDialog.fileUrls.length)
click.visible = false
//title.visible = false
while(i<fileDialog.fileUrls.length)
loop()
onRejected:
console.log("Canceled")
fileDialog.visible = false
click.visible = false
Component.onCompleted: visible = false
Image
id: show
visible: false
x:0
y:0
width: 300
height: 300
Timer
id: tmr
interval: 5000
running: false
repeat: false
onTriggered:
show.visible = false
function loop()
show.source = fileDialog.fileUrls[i]
show.visible = true
tmr.running = true
i++
当loop()
被调用时,它会运行show.source = fileDialog.fileUrls[i]
来停止。之后,show.visible = true
和 tmr.running
将被调用。
有人帮帮我吗?
【问题讨论】:
您的问题缺少您遇到的实际问题。 【参考方案1】:问题在于while
,在时间触发之前,i 值已到达末尾。
一种解决方案是在计时器到期时调用循环,即onTriggered
,并在loop
函数中显示所有选定的图片后停止计时器。
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
Window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
property int i:0
FileDialog
id: fileDialog
visible: false
title: "Choose a file"
property url defaultz: "E:\IMG"
folder: defaultz
selectMultiple: true
nameFilters: [ "Image files (*.jpg *.png *.bmp)", "All files (*)" ]
onAccepted:
console.log("You chose: " + fileDialog.fileUrls)
console.log(fileDialog.fileUrls.length)
//click.visible = false
//title.visible = false
// while(i<fileDialog.fileUrls.length)
// loop()
//
loop(); // show first picture immediately
tmr.start(); // start timer after selection
onRejected:
console.log("Canceled")
fileDialog.visible = false
//click.visible = false
Component.onCompleted: fileDialog.visible = true
Image
id: show
visible: false
x:0
y:0
width: 300
height: 300
Timer
id: tmr
interval: 5000
running: false
repeat: true
onTriggered:
show.visible = false
show.visible = false
i++
loop()
console.log("triggered: " + i)
function loop()
if(i<fileDialog.fileUrls.length)
show.source = fileDialog.fileUrls[i]
console.log("showing: " + i + " " + fileDialog.fileUrls[i])
show.visible = true
else
tmr.stop(); // stop the timer
console.log("stopped")
【讨论】:
这里有一个新问题。当我显示 img 时,它会旋转。请帮帮我好吗? 没看懂,能不能把旋转后的图发一下。你到底想做什么?以上是关于使用 FileDialog 时在 QML 中循环的主要内容,如果未能解决你的问题,请参考以下文章
单击列时在 Qml TableView Header 中查找单击事件