[英]QtQuickControls FileDialog Automation
我正在嘗試在 QtQuick Controls FileDialog 中自動選擇 QML 中的文件。 當fileUrl
屬性為只讀時,如何使用特定的fileUrl
調用 FileDialog 的accept
?
當前的嘗試涉及調用filedialog.clearSelection
、 filedialog.addSelection
和最后的filedialog.accept
。 clearSelection
和addSelection
沒有記錄,但可以在https://github.com/qt/qtquickcontrols/blob/dev/src/dialogs/qquickfiledialog.cpp 中找到(假設 Qt 使用了 DefaultFileDialog,因為這可能取決於系統)
然而, clearSelection 似乎只是偶爾工作,如果手動使用相同的FileDialog
則沒有影響,因此addSelection
無法設置fileUrl
。
下面是一個 QML 文件(在 QtCreator 中作為基本項目加載)演示了這一點。 帶有手動文件對話框打開按鈕和自動打開按鈕:
import QtQuick 2.9
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.3
Window {
visible: true;width: 200;height:200
FileDialog {id: filedialog; onAccepted: console.log("File Dialog Accepted: ", fileUrl, fileUrls);}
Row {
Button {text: "manual"; onClicked: filedialog.open()}
Button {
text: "auto_qml"
onClicked: {
console.log("Current selection:", filedialog.fileUrl, filedialog.fileUrls)
filedialog.clearSelection();
console.log("cleared selection:", filedialog.fileUrl, filedialog.fileUrls) // only clears selection if manual not used
let t = filedialog.addSelection("file:/home/user/tempfile.txt");
console.log("add selection success:", t) // a non existent file returns false, so file must exist
filedialog.accept()
}
}
}
}
作為變體,您可以使用Qt.labs.platform 1.1
庫。 它包含具有一些其他行為的FileDialog
- file
屬性不是只讀的。
你可以這樣做:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.4
import Qt.labs.platform 1.1
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
FileDialog {id: filedialog; onAccepted: console.log("File Dialog Accepted: ", file, files);}
Row {
Button {text: "manual"; onClicked: filedialog.open()}
Button {
text: "auto_qml"
onClicked: {
filedialog.file = "file:/home/user/tempfile.txt";
console.log("Current selection:", filedialog.file, filedialog.files)
filedialog.accepted()
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.