首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtQuickControls FileDialog自动化

QtQuickControls FileDialog自动化
EN

Stack Overflow用户
提问于 2021-09-30 14:47:47
回答 1查看 89关注 0票数 1

我正在尝试在QtQuick控件FileDialog中自动选择QML中的文件。当fileUrl属性为只读时,如何使用特定的fileUrl调用FileDialog的accept

当前的尝试涉及到调用filedialog.clearSelectionfiledialog.addSelection,最后调用filedialog.acceptclearSelectionaddSelection没有文档记录,但可以在https://github.com/qt/qtquickcontrols/blob/dev/src/dialogs/qquickfiledialog.cpp中找到(假设Qt使用了DefaultFileDialog,因为这可能取决于系统)

然而,clearSelection似乎只能偶尔工作,如果手动使用相同的FileDialog,则没有任何影响,因此addSelection无法设置fileUrl

下面是一个QML文件(作为QtCreator中的一个基本项目加载)演示了这一点。具有手动文件对话框打开按钮和自动打开按钮:

代码语言:javascript
复制
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()
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-17 07:58:06

作为变种,你可以使用Qt.labs.platform 1.1库。它包含另一个行为的FileDialog -- file属性不是只读的。

你可以这样做:

代码语言:javascript
复制
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()
            }
        }
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69394338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档