qt - 使用 FileDialog 时在 QML 中循环
问题描述
我的循环有一些问题。我正在尝试从浏览器文件加载 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
被调用。
有人帮我吗?
解决方案
问题在于while
,我的值在时间触发之前达到了终点。
一种解决方案是在定时器到期时调用循环,即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")
}
}
}
推荐阅读
- python - 如何使用日期作为 pandas pivot_table 中的值而不是数字数据?
- node.js - 我可以在我的 package.json 中编写一种重定向导出来弥补我的一个部门中缺少的导出吗?
- automated-tests - Appium Pagefactory 从 POM 运行时抛出 noSuchMethodException
- wordpress - 自定义类型 - 显示所有分类名称和图像
- javascript - 什么是:{名称:“泰勒”}在javascript中?
- python - Selenium - 谷歌表单的框架问题
- javascript - 如何使用 Node js 编写具有 ANSI 编码的 CSV 文件
- python - 为什么我的玩家精灵没有移动,即使计算机识别了移动?
- php - Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) 调用未定义函数App\needsRehash()
- python - 即使我指定了正确的编码参数,为什么我仍然在 pandas read_csv() 函数中收到 UnicodeDecodeError?