QML学习笔记(四十)QML的FileDialog和FolderDialog

前言

从本节开始,我们将介绍几个常用的弹窗,它们将有效提高界面的交互性,引导用户进行下一步的操作。

首先介绍的是选择文件和选择目录的弹窗。

一、模块引入

我的qt版本是5.14.2,还没有升到6.0,所以有些模块支持得不好。

在我的版本里面,FileDialog是属于QtQuick.Dialogs 1.2的,这是QtQuick的一个弹窗模块,但FolderDialog不在其中,只有在Qt6才包含在内。

如果想要使用FolderDialog,只能退回到5.8的import Qt.labs.platform 1.1,可问题是Qt.labs.platform里也有对于FileDialog,这样可能会起冲突。

我选择的做法,是对这两个模块起别名。

cpp 复制代码
import QtQuick.Dialogs 1.2 as OldDialogs
import Qt.labs.platform 1.1 as NativeDialogs

NativeDialogs.FileDialog { ... }
OldDialogs.FileDialog { ... }

这里引用的时候,需要戴上别名,希望在接下来的代码中不会让你产生混乱。

二、代码演示

这里我直接做了两个按钮,分别获取用户选择的文件和目录:

cpp 复制代码
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
//import QtQuick.Dialogs 1.2
//import Qt.labs.platform 1.1
import QtQuick.Dialogs 1.2 as OldDialogs
import Qt.labs.platform 1.1 as NativeDialogs

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("QmlDialog")

    ColumnLayout{
        spacing: 20
        anchors.centerIn: parent

        Button{
            text: "Choose file"
            onClicked: function(){
                fileDialogId.open()
            }
        }

        Button{
            text: "Choose folder"
            onClicked: function(){
                folderDialogId.open()
            }
        }

        Text{
            id:textId
            text: "User hasn't chosen yet."
            wrapMode: Text.Wrap
        }

        OldDialogs.FileDialog{
            id: fileDialogId
            title: "Choose file"
            nameFilters: ["Text files (*.txt)", "HTML files (*.html *htm)", "Images (*.jpg *.png)"]
//            fileMode: FileDialog.OpenFiles    // Qt6
            selectMultiple: true
            onAccepted: textId.text = "文件:" + fileDialogId.fileUrls
            onRejected: console.log("Dialog rejected")
        }
        
        NativeDialogs.FolderDialog {
            id: folderDialogId
            folder: "D:/"
            onAccepted: {
                textId.text = folderDialogId.currentFolder
            }

            onRejected: console.log("Dialog rejected")
        }
    }


}


大概是这样吧,写的不是很好。

三、总结

这种弹窗的引用其实是直接拿官方现成的来使用,样式啥的都比较丑。

不过掌握这种弹窗的使用还是很有必要的。

相关推荐
HyperAI超神经13 分钟前
【vLLM 学习】Prefix Caching
人工智能·深度学习·学习·大语言模型·cpu·gpu·vllm
.小墨迹28 分钟前
C++学习之std::move 的用法与优缺点分析
linux·开发语言·c++·学习·算法·ubuntu
努力学习的小廉28 分钟前
【QT(五)】—— 常用控件(二)
开发语言·qt
黑客思维者1 小时前
机器学习007:监督学习【回归算法】(线性回归)--股票背后的预测学
学习·机器学习·回归·线性回归·监督学习
EniacCheng1 小时前
【RUST】学习笔记-整型
笔记·学习·rust
断剑zou天涯1 小时前
【算法笔记】树状数组IndexTree
java·笔记·算法
北岛寒沫2 小时前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第九课 公共产品与公共资源)
经验分享·笔记
Vizio<2 小时前
STM32HAL库开发笔记-STM32CubeMX点灯
笔记·stm32·嵌入式硬件
找方案2 小时前
hello-agents 学习笔记:智能体发展史 —— 从符号逻辑到 AI 协作的进化之旅
人工智能·笔记·学习·智能体·hello-agents
skywalk81632 小时前
Auto-Coder用Qwen3-Coder-30B-A3B-Instruct模型写一个学习汉字的项目
人工智能·学习·auto-coder