簡體   English   中英

QtQuickControls 文件對話框自動化

[英]QtQuickControls FileDialog Automation

我正在嘗試在 QtQuick Controls FileDialog 中自動選擇 QML 中的文件。 fileUrl屬性為只讀時,如何使用特定的fileUrl調用 FileDialog 的accept

當前的嘗試涉及調用filedialog.clearSelectionfiledialog.addSelection和最后的filedialog.accept clearSelectionaddSelection沒有記錄,但可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM