Qt Quick 文件和文件夹操作

选择文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import QtQuick 2.12
import QtQuick.Controls 2.12
import Qt.labs.platform 1.1

ApplicationWindow {
visible: true
width: 400
height: 300

Button {
text: "选择文件夹"
onClicked: folderDialog.open()
}

FolderDialog {
id: folderDialog
title: "请选择一个文件夹"
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
onAccepted: {
console.log("选择的文件夹: " + folderDialog.folder)
}
}
}

默认获取的路径中是以file:///开头的,这里我们要去掉

1
2
3
var folderPath = folderDialog.folder.toLocaleString()
var localPath = folderPath.replace("file:///", "")
console.log("选择的文件夹: " + localPath)

选择文件

在 QML 中,如果你希望 FileDialog 只允许选择特定格式的文件(例如图片文件),你可以通过设置 nameFilters 属性来实现。

nameFilters 属性允许你指定文件类型过滤器,以便只显示符合特定格式的文件。

如何使用 FileDialog 选择图片文件(例如 .jpg, .png, .gif 等):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import QtQuick 2.12
import QtQuick.Controls 2.12
import Qt.labs.platform 1.1

ApplicationWindow {
visible: true
width: 400
height: 300

Button {
text: "选择图片文件"
onClicked: fileDialog.open()
}

FileDialog {
id: fileDialog
title: "选择图片文件"
folder: StandardPaths.writableLocation(StandardPaths.PicturesLocation)
nameFilters: [ "图片文件 (*.jpg *.jpeg *.png *.gif *.bmp)", "所有文件 (*)" ]
onAccepted: {
console.log("选择的图片文件: " + fileDialog.file)
}
}
}

说明:

  1. nameFilters 属性

    • nameFilters 是一个字符串列表,用于指定文件过滤器。

    • 每个过滤器由两部分组成:描述和文件扩展名。

      例如 "图片文件 (*.jpg *.jpeg *.png *.gif *.bmp)" 表示过滤器会显示 .jpg, .jpeg, .png, .gif, .bmp 文件。

    • 你可以添加多个过滤器,例如 "所有文件 (*)" 表示显示所有文件。

  2. folder 属性

    • folder 用于指定默认打开的文件夹路径。
    • StandardPaths.writableLocation(StandardPaths.PicturesLocation) 表示默认打开系统中的图片文件夹。
  3. onAccepted 信号

    • 当用户选择一个文件并点击“确定”时,会触发 onAccepted 信号。
    • 你可以通过 fileDialog.file 获取用户选择的文件路径。

支持的图片格式

  • 常见的图片格式包括:
    • .jpg / .jpeg:JPEG 格式。
    • .png:PNG 格式。
    • .gif:GIF 格式。
    • .bmp:BMP 格式。
    • .tiff:TIFF 格式。
    • .webp:WebP 格式。

扩展:选择多种格式

如果你希望支持多种文件格式,可以在 nameFilters 中添加多个过滤器,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
FileDialog {
id: fileDialog
title: "选择图片文件"
nameFilters: [
"图片文件 (*.jpg *.jpeg *.png *.gif *.bmp)",
"PNG 文件 (*.png)",
"JPEG 文件 (*.jpg *.jpeg)",
"所有文件 (*)"
]
onAccepted: {
console.log("选择的图片文件: " + fileDialog.file)
}
}