QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释

(13)本源代码定义于头文件 qfiledialog . h

#ifndef QFILEDIALOG_H
#define QFILEDIALOG_H#include <QtWidgets/qtwidgetsglobal.h>
#include <QtCore/qdir.h>
#include <QtCore/qstring.h>
#include <QtCore/qurl.h>
#include <QtWidgets/qdialog.h>#include <functional>QT_REQUIRE_CONFIG(filedialog);QT_BEGIN_NAMESPACEclass QModelIndex;
class QItemSelection;
struct QFileDialogArgs;
class QFileDialogPrivate;
class QAbstractFileIconProvider;
class QAbstractItemDelegate;
class QAbstractProxyModel;/*
The QFileDialog class provides a dialog that allow users to select files or directories。Detailed Description  :
QFileDialog类使用户能够浏览文件系统以选择一个或多个文件或目录。
创建QFileDialog的最简单方法是使用静态函数。fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));在上述示例中,使用一个静态函数创建了模态对话框 QFileDialog。该对话框最初会显示“/home/iana”目录的内容,并显示与字符串“lmage Files(*.png*jpg*.bmp)”中给出的模式匹配的文件。
文件对话框的父窗口被设置为该对话框,窗口标题被设置为“OpenImage",如果你想使用多个过滤器,请用两个分号 ;; 将它们分开。例如:"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"您可以通过不使用静态函数来创建自己的QFileDialog。
通过调用setFileMode()函数,您可以指定用户在对话框中必须选择的内容:QFileDialog dialog(this);dialog.setFileMode(QFileDialog::AnyFile);在上述示例中,文件对话框的模式被设置为“AnyFile”,这意味着用户可以选择任何文件,甚至指定一个不存在的文件。
这种模式对于创建“另存为”文件对话框非常有用。
如果用户必须选择已存在的文件,应使用“ExistingFile”;
如果只允许选择目录,则应使用“Directory”。有关模式完整列表,请参阅QFileDialog::FileMode枚举。fileMode`属性包含对话框的操作模式;这指示了期望用户选择的对象类型。
使用`setNameFilter()来设置对话框的文件筛选器。例如:dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));在上述示例中,过滤器被设置为“Images(*.png*.xpm *.jpg)”,
这意味着只有扩展名为png、xpm或ipg的文件才会显示在QFileDialog中。
您可以通过调用setNameFilters()来应用多个过滤器。
使用selectNameFilter()来选择您设定的其中一个过滤器作为文件对话框的默认过滤器。文件对话框有两种视图模式:列表和详细。
列表以文件和目录名称的列表形式呈现当前目录的内容。
详细模式也展示文件和目录名称的列表,但会在每个名称旁提供额外信息,如文件大小和修改日期。
使用`setViewMode ()'方法来设置模式:dialog.setViewMode(QFileDialog::Detail);在创建自己的文件对话框时,你需要使用的最后一个重要函数是selectedFiles()。QStringList fileNames;if (dialog.exec())fileNames = dialog.selectedFiles();在上面的例子中,创建并显示了一个模态文件对话框。如果用户点击了确定,则所选的文件将被放入fileName中。可以通过setDirectory()设置对话框的工作目录。可以使用selectFile()函数选择当前目录中的每个文件。标准对话框示例展示了如何使用QFileDialog以及Qt库中的其他内置对话框.
默认情况下,如果平台有相应的原生文件对话框,将使用该原生对话框。
在这种情况下,原本用于构建对话框的控件将不会实例化,因此相关的访问器(如layout()和itemDelegate())将返回null。
您可以通过设置“DontUseNativeDialog”选项来确保使用基于控件的实现而非原生对话框。*/class Q_WIDGETS_EXPORT QFileDialog : public QDialog
{Q_OBJECT//enum ViewMode { Detail, List };//此属性用于控制文件和目录在对话框中显示的方式。//默认情况下,使用详细模式来显示文件和目录的信息。默认使用 Detail 模式。Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode)//enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles };//此属性保存对话框的文件模式。文件模式定义了用户在对话框中应选择的项目数量和类型。//默认情况下,此属性设置为AnyFile。//此函数将设置文件名和接受对话框标签。在调用setFileMode()之后,可以设置自定义文本。Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode)//enum AcceptMode { AcceptOpen, AcceptSave };//此属性保存对话框的接受模式。操作模式定义了对话框是用于打开文件还是保存文件。//默认情况下,此属性设置为Acceptopen。Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode)//如果未指定其他后缀,则将后缀添加到文件名中。//该属性指定一个字符串,如果文件名没有后缀,这个字符串将被添加到文件名中。//后缀通常用于表示文件类型(例如,“txt”表示文本文件)。如果第一个字符是点dot ('.'),则将其移除。Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix)//此属性包含影响对话框外观和感觉的各种选项。 默认情况下,所有选项都已禁用。//选项(特别是DontUseNativeDialogs选项)应在更改对话框属性或显示对话框之前设置。//在对话框可见时设置选项并不能保证立即对对话框产生影响(这取决于选项和平台)。//在更改其他属性后设置选项可能会导致这些值无效。Q_PROPERTY(Options options READ options WRITE setOptions)//此属性包含文件对话框应允许导航的URL方案。   // scheme 方案[skiːm];   主题 theme//设置此属性可限制用户能够选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。//空列表表示未施加任何限制(为默认值)。//对于本地文件(“file”方案)的支持是默示的且总是开启的;无需将其包含在限制列表中。Q_PROPERTY(QStringList   supportedSchemesREAD      supportedSchemes   WRITE   setSupportedSchemes)private:Q_DECLARE_PRIVATE(QFileDialog)Q_DISABLE_COPY(QFileDialog)Q_PRIVATE_SLOT(d_func(), void _q_pathChanged(const QString &))Q_PRIVATE_SLOT(d_func(), void _q_navigateBackward())Q_PRIVATE_SLOT(d_func(), void _q_navigateForward())Q_PRIVATE_SLOT(d_func(), void _q_navigateToParent())Q_PRIVATE_SLOT(d_func(), void _q_createDirectory())Q_PRIVATE_SLOT(d_func(), void _q_showListView())Q_PRIVATE_SLOT(d_func(), void _q_showDetailsView())Q_PRIVATE_SLOT(d_func(), void _q_showContextMenu(const QPoint &))Q_PRIVATE_SLOT(d_func(), void _q_renameCurrent())Q_PRIVATE_SLOT(d_func(), void _q_deleteCurrent())Q_PRIVATE_SLOT(d_func(), void _q_showHidden())Q_PRIVATE_SLOT(d_func(), void _q_updateOkButton())Q_PRIVATE_SLOT(d_func(), void _q_currentChanged(const QModelIndex &index))Q_PRIVATE_SLOT(d_func(), void _q_enterDirectory(const QModelIndex &index))Q_PRIVATE_SLOT(d_func(), void _q_emitUrlSelected(const QUrl &))Q_PRIVATE_SLOT(d_func(), void _q_emitUrlsSelected(const QList<QUrl> &))Q_PRIVATE_SLOT(d_func(), void _q_nativeCurrentChanged(const QUrl &))Q_PRIVATE_SLOT(d_func(), void _q_nativeEnterDirectory(const QUrl&))Q_PRIVATE_SLOT(d_func(), void _q_goToDirectory(const QString &path))Q_PRIVATE_SLOT(d_func(), void _q_useNameFilter(int index))Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged())Q_PRIVATE_SLOT(d_func(), void _q_goToUrl(const QUrl &url))Q_PRIVATE_SLOT(d_func(), void _q_goHome())Q_PRIVATE_SLOT(d_func(), void _q_showHeader(QAction *))Q_PRIVATE_SLOT(d_func(), void _q_autoCompleteFileName(const QString &text))Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent))Q_PRIVATE_SLOT(d_func(), void _q_fileRenamed(const QString &path,const QString &oldName,const QString &newName))friend class QPlatformDialogHelper;protected:QFileDialog(const QFileDialogArgs & args);void done       (int result) override; //这是重写了基类 QDialog 里的槽函数void accept     ()           override;void changeEvent(QEvent * e) override; //重写了基类里的事件public:enum DialogLabel { LookIn, FileName, FileType, Accept, Reject };//Constructs a file dialog with the given parent and widget flags.QFileDialog(QWidget * parent, Qt::WindowFlags flags);explicitQFileDialog(QWidget * parent    = nullptr  ,  const QString & caption = QString(),const   QString & directory = QString(),  const QString & filter  = QString());//Constructs a file dialog with the given parent and//  caption that initially displays the contents of the specified directory.//The contents of the directory are filtered before being shown in the dialog,//  using a semicolon-separated半角分隔符 list of filters specified by filter.~QFileDialog();enum ViewMode { Detail, List };Q_ENUM(ViewMode)
//  //此属性用于控制文件和目录在对话框中显示的方式。默认使用 Detail 模式。
//   Q_PROPERTY(ViewMode      viewMode
//              READ          viewMode      WRITE     setViewMode)ViewMode      viewMode() const;void       setViewMode(ViewMode mode);enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles };Q_ENUM(FileMode)
//  //此属性保存对话框的文件模式。文件模式定义了用户在对话框中应选择的项目数量和类型。
//  //默认情况下,此属性设置为AnyFile。
//   Q_PROPERTY(FileMode      fileMode
//              READ          fileMode      WRITE     setFileMode)FileMode      fileMode() const;void       setFileMode(FileMode mode);enum AcceptMode { AcceptOpen, AcceptSave };Q_ENUM(AcceptMode)
//  //此属性保存对话框的接受模式。操作模式定义了对话框是用于打开文件还是保存文件。
//  //默认情况下,此属性设置为Acceptopen。
//   Q_PROPERTY(AcceptMode    acceptMode
//              READ          acceptMode    WRITE     setAcceptMode)AcceptMode    acceptMode() const;void       setAcceptMode(AcceptMode mode);//  //如果未指定其他后缀,则将后缀添加到文件名中。如果第一个字符是点dot ('.'),则将其移除。
//   Q_PROPERTY(QString       defaultSuffix
//              READ          defaultSuffix   WRITE   setDefaultSuffix)QString       defaultSuffix() const;void       setDefaultSuffix(const QString & suffix);// keep this in sync with QFileDialogOption::FileDialogOptionsenum Option{   ShowDirsOnly                = 0x00000001,//仅在文件对话框中显示目录。默认情况下,会同时显示文件和目录。(仅在目录模式下有效。)DontResolveSymlinks         = 0x00000002,//不要在文件对话框中解析符号链接。默认情况下,符号链接会被解析。DontConfirmOverwrite        = 0x00000004, //要求确认有写操作//如果选择了现有文件,则不要求确认。默认情况下会请求确认//Note: This opption is not supported on macOS when using the native file dialog.DontUseNativeDialog         = 0x00000008,//请勿使用默认的本机文件对话框。除非您使用了包含QOBJECT宏的 QFileDialog子类,//或者该平台没有您所需类型的本机对话框,否则将使用默认的本机文件对话框。//Note: This option must be set before changing dialog properties or showing the dialog.ReadOnly                    = 0x00000010, //表示模型是只读的。HideNameFilterDetails       = 0x00000020,//指示文件名过滤器详细信息是否被隐藏。DontUseCustomDirectoryIcons = 0x00000040//请始终使用默认目录图标。某些平台允许用户设置不同的图标。此枚举值是在Qt 5.2中添加的。//自定义图标查找在网络或可移动驱动器上会产生显著的性能影响。//设置此选项将启用图标提供程序中的“QFileIconProvider::DontUseCustomDirectoryIcons”选项。};Q_ENUM(Option)Q_DECLARE_FLAGS(Options, Option) // Options = QFlags<Option>Q_FLAG(Options)
//  //此属性包含影响对话框外观和感觉的各种选项。 默认情况下,所有选项都已禁用。
//   Q_PROPERTY(Options       options
//              READ          options       WRITE     setOptions)Options       options() const;void       setOption (Option option, bool on = true);void       setOptions(Options options);bool      testOption (Option option) const;//  //此属性包含文件对话框应允许导航的URL方案。空列表表示未施加任何限制(为默认值)。
//  //对于本地文件(“file”方案)的支持是默示的且总是开启的;无需将其包含在限制列表中。
//   Q_PROPERTY(QStringList      supportedSchemes
//              READ             supportedSchemes      WRITE      setSupportedSchemes)QStringList      supportedSchemes() const;void          setSupportedSchemes(const QStringList & schemes);using   QDialog::open;void             open(QObject * receiver, const char * member);void       setVisible(bool visible) override;QDir        directory() const;void     setDirectory(const QString &directory);inlinevoid     setDirectory(const QDir &directory);{ setDirectory(directory.absolutePath()); }QUrl        directoryUrl() const;void     setDirectoryUrl(const QUrl & directory);void        selectFile   (const QString & filename);QStringList selectedFiles() const;void        selectUrl   (const QUrl &url);QList<QUrl> selectedUrls() const;QDir::Filters           filter() const;void                 setFilter(QDir::Filters filters);QStringList         nameFilters() const;void          selectNameFilter (const QString     & filter );QString     selectedNameFilter () const;void             setNameFilter (const QString     & filter );void             setNameFilters(const QStringList & filters);QStringList         mimeTypeFilters() const;void          selectMimeTypeFilter (const QString     & filter );QString     selectedMimeTypeFilter () const;void             setMimeTypeFilters(const QStringList & filters);QList<QUrl>         sidebarUrls() const;void             setSidebarUrls(const QList<QUrl> & urls);QByteArray          saveState() const;bool             restoreState(const QByteArray & state);QStringList         history() const;void             setHistory(const QStringList & paths);QAbstractItemDelegate *     itemDelegate() const;void                     setItemDelegate(QAbstractItemDelegate     * delegate);QAbstractFileIconProvider * iconProvider() const;void                     setIconProvider(QAbstractFileIconProvider * provider);QString             labelText(DialogLabel label) const;void             setLabelText(DialogLabel label, const QString & text);QAbstractProxyModel       * proxyModel() const;void                     setProxyModel(QAbstractProxyModel * model);Q_SIGNALS:void   fileSelected(const QString     & file );void  filesSelected(const QStringList & files);void    urlSelected(const QUrl        & url  );void   urlsSelected(const QList<QUrl> & urls);void filterSelected(const QString     & filter);void    currentChanged(const QString  & path);void currentUrlChanged(const QUrl     & url);void    directoryEntered(const QString   & directory);void directoryUrlEntered(const QUrl      & directory);public:/*//这是一个方便的静态函数,返回用户选择的现有文件。如果用户按下取消,则返回空字符串。//该函数使用给定的父控件 parent创建一个模态文件对话框。//如果父控件不为空,则对话框将居中显示在父控件上方.//文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。//仅显示与给定筛选器 filter匹配的文件,选定的筛选器将设置为 selectedFilter。//参数 dir、filter和 selectedFilter可以是为空的字符串。//如果您想要多个筛选器,可以使用俩分号';;'分隔开来,例如://  "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"//参数 options包含了关于如何运行对话框的各种选项, Options = QFlags<Option>//请参阅 QFileDialog::Option 枚举以获取有关可传递标志的更多信息。//对话框的标题设置为caption。如果未指定标题,则将使用默认标题。//在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。//在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,//  并且如果父对象不是 nullptr,则会将对话框定位在父对象的标题栏下方。//在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,//如果/usr/tmp是到/var/tmp的符号链接,那么在输入/usr/tmp后,文件对话框将切换到/var/tmp。//如果选项 options包括“不解析符号链接”,则文件对话框会将符号链接视为普通目录。//警告:在对话框执行过程中请勿删除父窗体 parent。//如果您想这么做,应使用 QFileDialog构造函数之一自行创建对话框。*/static QString     getOpenFileName (QWidget     * parent           = nullptr  ,const   QString     & caption          = QString(),const   QString     & dir              = QString(),const   QString     & filter           = QString(),QString     * selectedFilter   = nullptr  ,Options       options          = Options() );static QUrl        getOpenFileUrl  (QWidget     * parent           = nullptr      ,const   QString     & caption          = QString    (),const   QUrl        & dir              = QUrl       (),const   QString     & filter           = QString    (),QString     * selectedFilter   = nullptr      ,Options       options          = Options    (),const   QStringList & supportedSchemes = QStringList()  );/*这是一个方便的静态函数,返回用户选择的现有文件。如果用户按下取消,则返回一个空URL。该函数的使用方式与 QFileDialog::getOpenFileName()类似。具体而言,parent、caption、dir、filterselectedFilter和 options 的使用方法完全相同。与QFileDialog:getOpenFileName ()的主要区别在于它为用户提供了选择远程文件的能力。正因如此,返回类型和dir的类型被设定为QUrl。supportedSchemes`参数允许限制用户能够选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。*//*这是一个方便的静态函数,将返回用户选择的一个或多个现有文件。该函数使用给定的父控件 parent创建一个模态文件对话框。如果父控件不为空,则对话框将居中显示在父控件上方。文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。过滤器被设置为 filter,这样只有与过滤器匹配的文件才会显示。被选定的过滤器被设置为selectedfilter。dir、selectedFilter和filter 这些参数可以是空字符串。如果您需要多个过滤器,可以使用“;;”将它们分隔开,例如:"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"对话框的标题设置为caption。如果未指定标题,则将使用默认标题。在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。*/static QStringList getOpenFileNames(QWidget     * parent           = nullptr,const   QString     & caption          = QString(),const   QString     & dir              = QString(),const   QString     & filter           = QString(),QString     * selectedFilter   = nullptr,Options       options          = Options() );static QList<QUrl> getOpenFileUrls (QWidget     * parent           = nullptr  ,const   QString     & caption          = QString(),const   QUrl        & dir              = QUrl   (),const   QString     & filter           = QString(),QString     * selectedFilter   = nullptr  ,Options       options          = Options(),const   QStringList & supportedSchemes = QStringList());/*这是一个方便的自定义静态函数,将返回由用户选定的一个或多个现有文件。如果用户按下“取消”按钮,则返回一个空列表。该函数的使用方式与QFileDialog::getOpenFileNames()类似。特别是,parent、caption、dir、filter、selectedFilter和options的使用方式完全相同。与`QFileDialog::getOpenfileNames ()、的主要区别在于它为用户提供了选择远程文件的能力。这就是为什么返回类型和`dir`类型分别是`QList<QUrl>`和`QUrL`的原因。supportedSchemes`参数允许限制用户能够选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。*//*//这是一个方便的静态函数,将返回用户选择的文件名。该文件不必存在。//它会创建一个与给定父窗口 parent关联的模态文件对话框。//如果父窗口不为空指针,则对话框将显示在父窗口正中央。//getSaveFileName(this, tr("Save File"), "/home/aa.png", tr("Images (*.png *.jpg)"));//文件对话框的工作目录将设置为 dir。如果 dir 中包含文件名,则该文件将被选中。//仅显示与筛选器匹配的文件。选定的筛选器将设置为 selectedFilter。//dir、selectedFilter和 filter 参数可以设置为空字符串。多个筛选器之间用“;;”分隔。例如:// "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"//options参数包含了关于如何运行对话框的各种选项,//  请参阅 QFileDialog:.Option 枚举以获取有关可传递标志的更多信息。//可以通过将selectedFilter设置为所需值来选择默认过滤器。//对话框的标题设置为 caption。如果未指定标题,则将使用默认标题。//在Windows和macOS上,此静态函数将使用原生文件对话框而不是QFileDialog。//在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,//而如果父对象不是nulptr,那么它会将对话框定位在父对象标题栏的下方。//在macOs上,由于其内置的文件对话框,过滤参数将被忽略。//在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,//如果/usr/tmp是到/var/tmp的符号链接那么在输入/usr/tmp后,文件对话框将切换到/var/tmp。//如果选项包括“不解析符号链接”,则文件对话框会将夺号链接视为普通目录。//警告:在对话框执行过程中请勿删除父控件 parent。//如果您想这么做,应使用QFileDialog构造函数之-自行创建对话框。*/static QString     getSaveFileName (QWidget     * parent           = nullptr  ,const   QString     & caption          = QString(),const   QString     & dir              = QString(),const   QString     & filter           = QString(),QString     * selectedFilter   = nullptr  ,Options       options          = Options());static QUrl        getSaveFileUrl  (QWidget     * parent           = nullptr  ,const   QString     & caption          = QString(),const   QUrl        & dir              = QUrl   (),const   QString     & filter           = QString(),QString     * selectedFilter   = nullptr  ,Options       options          = Options(),const   QStringList & supportedSchemes = QStringList()  );/*这是一个方便的自定义静态函数,用于返回用户选择的一个文件。该文件不一定非得存在。如果用户按下取消”按钮,函数将返回一个空URL。该函数的使用方式与QFileDialog::getSaveFileName ()类似。具体而言,parent、caption、dir、filter、selectedFilter和options的使用方式完全相同。与`QFileDialog::getSaveFileName()、的主要区别在于它为用户提供了选择远程文件的能力。正因如此,返回类型和`dir`的类型被设定为`QUrl`。参数允许限制用户能够选择的URL类型。这是应用程序声明其将支持的协supportedSchemes议以保存文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。*//*这是一个方便的静态函数,将返回用户选择的现有目录。该函数使用给定的父控件 parent创建一个模态文件对话框。如果父控件不为空,则对话框将居中显示在父控件上方。该对话框的工作目录被设置为 dir,标题被设置为 caption。两者均可为空字符串,此时将分别使用当前目录和默认标题。options参数包含了关于如何运行对话框的各种选项,有关您可以传递的标记的详细信息,请参见QFileDialog::Option 枚举。为确保使用原生文件对话框,必须设置 ShowDirsOnly。在Windows和macOs上,这个静态函数将使用原生文件对话框而非OFileDialog。然而,原生的Windows文件对话框并不支持在目录选择器中显示文件。您需要传递DontUseNativeDialog参数,以便使用QFileDialog来显示文件。在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,如果/usr/tmp是一个指向/var/tmp的符号涟接,那么在输入/usr/tmp后,文件对话框将切换至/ar/tmp。如果使用选项中的“Don't Resolve Symlinks,则文件对话框会将符号链接视为普通目录。在Windows上,该对话框将启动一个阻塞的模态事件循环,不会派发任何QTimer,并且如果父对象不是nullptr,则会将对话框定位在父对象的标题栏下方。警告:在对话框执行过程中请勿删除父对话框。如果您想这么做,应使用QFileDialog构造函数之一自行创建对话框。*/static QString      getExistingDirectory   (QWidget * parent       = nullptr  ,const   QString     & caption          = QString(),const   QString     & dir              = QString(),Options       options          = ShowDirsOnly );static QUrl         getExistingDirectoryUrl(QWidget * parent       = nullptr  ,const   QString     & caption          = QString(),const   QUrl        & dir              = QUrl()   ,Options       options          = ShowDirsOnly,const   QStringList & supportedSchemes = QStringList());/*这是一个方便的自定义静态函数,将返回由用户选择的现有目录。如果用户按下“取消”按钮,则返回一个空URL.该函数的使用方式类似于QFileDialog:getExistingDirectory()。特别是,parent、caption、dir和options在使用时完全相司。与`QFileDialog:getExistingDirectory()、的主要区别在于它为用户提供了选择远程目录的能力。这就是为什么返回类型和`dir'的类型是`QUrL'的原因。supportedSchemes`参数允许限制用户能够选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示没有施加任何限制(默认为如此)。对于本地文件(“file”方案)的支持是默认且始终开启的;无需将其包含在限制列表中。在可能的情况下,这个静态函数将使用原生文件对话框而非QFileDialog。在不支持选择远程文件的平台上,Qt将仅允许选择本地文件。此函数在Qt 5.2中引入。*//*这是一个方便的静态函数,将返回用户选择的文件内容。该函数用于在Qt for WebAssembly中访问本地文件,而Web沙箱会对此类访问可能发生的途径施加限制。其实现方式将使得浏览器显示一个原生文件对话框,用户可根据参数 nameFilter“进行文件选择。它也可以在其他平台上使用,当无法访问本地文件时,它将回退到使用QFileDialog。该函数是异步的,且会立即返回。当文件被选择且其内容被读取到内存中时,将调用“fileContentsReady”回调函数。auto fileContentReady = [](const QString & fileName, const QByteArray & fileContent) {if (fileName.isEmpty()) {// No file was selected                   //这是个范例} else {// Use fileName and fileContent}};QFileDialog::getOpenFileContent("Images (*.png *.xpm *.jpg)",  fileContentReady);*/static void        getOpenFileContent(const QString    & nameFilter ,const  std::function<void(  const QString    & fileName,const QByteArray & fileContent )> & fileContentsReady);static void           saveFileContent(const QByteArray & fileContent,const QString   &  fileNameHint = QString());/*这是一个便利的静态函数,用于将文件内容 fileContent保存到文件中,使用由用户选择的文件名和位置。可以提供文件名提示 fileNameHint,以向用户建议一个文件名。该函数用于将文件保存到Qtfor WebAssembly的本地文件系统中,而Web沙箱会对此类访问可能发生的途径施加限制。其实现方式将使得浏览器显示一个原生文件对话框,用户可以在其中进行文件选择。它也可以在其他平台上使用,当无法访问本地文件系统时,它将回退到使用QFileDialog。该函数是异步的,并立即返回。QByteArray imageData; // obtained from e.g. QImage::save()QFileDialog::saveFile("myimage.png", imageData);*/}; //完结 class QFileDialog : public QDialogQ_DECLARE_OPERATORS_FOR_FLAGS(QFileDialog::Options)QT_END_NAMESPACE#endif // QFILEDIALOG_H

(14)

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89950.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Ajax的学习笔记

Ajax概念&#xff1a;是一门使用了js语言&#xff0c;可以使用于Javaweb&#xff0c;实现前端代码和后端代码连结的的一种异步同步&#xff08;不需要等待服务器相应&#xff0c;就能够发送第二次请求&#xff09;的一种技术&#xff0c;它主要用于网页内容的局部刷新&#xff…

The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(三)

文章目录The Missing Semester of Your CS Education 学习笔记以及一些拓展知识Vim编辑器笔记部分程序员常用的编辑器Vim的模式Vim的普通模式Vim的插入模式Vim的可视模式Vim的替换模式Vim的命令行模式Vim的高级功能文本对象宏寄存器缓冲区标记代码折叠Vim的常用配置Vim的常用插…

PyTorch常用的简单数学运算

一、基础算术运算1. 逐元素运算a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6])# 加减乘除 a b # [5, 7, 9] a - b # [-3, -3, -3] a * b # [4, 10, 18] a / b # [0.25, 0.4, 0.5]# 幂运算、平方根 a ** 2 # [1, 4, 9] torch.sqrt(a) # [1.0, 1.414, 1.732]2. 标…

C++ Lambda 表达式详解:从基础到实战

Lambda 表达式是 C11 引入的重要特性&#xff0c;它允许我们在代码中定义匿名函数&#xff0c;极大地简化了代码编写&#xff0c;尤其是在使用 STL 算法和多线程编程时。本文将详细介绍 Lambda 表达式的语法、特性及实际应用场景。什么是 Lambda 表达式&#xff1f;Lambda 表达…

Spring Boot注解详解

文章目录前言1. 核心启动注解SpringBootApplicationEnableAutoConfigurationSpringBootConfiguration2. 组件注解Component及其衍生注解ComponentServiceRepositoryControllerRestController3. 依赖注入注解AutowiredQualifierPrimary4. Web相关注解请求映射注解RequestMapping…

Web开发:ABP框架12——中间件Middleware的创建和使用

一、简介中间件可以用于鉴权、日志&#xff0c;拦截器可以用于指定方法或url的业务逻辑处理&#xff0c;两者分工不同&#xff0c;实现效果相似&#xff0c;先执行中间件&#xff0c;后执行拦截器&#xff0c;再到WebAPI接口。二、示例一个Token验证中间件三、代码1.Startup.cs…

京东商品评论如何获取?API接口实战指南

一、API接入准备1. 注册开发者账号访问京东开放平台&#xff1a;前往京东开放平台注册账号&#xff0c;完成企业或个人实名认证。创建应用&#xff1a;在控制台创建应用&#xff0c;获取App Key和App Secret&#xff08;用于签名认证&#xff09;。2. 申请API权限搜索接口&…

leetcode-sql-627变更性别

题目&#xff1a; Salary 表&#xff1a; --------------------- | Column Name | Type | --------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int | --------------------- id 是这个表的主键…

【学习路线】C#企业级开发之路:从基础语法到云原生应用

一、C#基础入门&#xff08;1-2个月&#xff09; &#xff08;一&#xff09;开发环境搭建Visual Studio安装配置 Visual Studio Community&#xff1a;免费版本&#xff0c;功能完整Visual Studio Code&#xff1a;轻量级&#xff0c;跨平台支持JetBrains Rider&#xff1a;专…

Planning Agent:基于大模型的动态规划与ReAct机制,实现复杂问题自适应执行求解

引言 在当今数据驱动的商业环境中&#xff0c;企业面临着日益复杂的决策问题。传统的数据分析工具往往难以应对多步骤、多依赖的复杂问题求解。例如&#xff0c;当企业需要分析"北美市场 Q1-Q2 主要产品的销售增长趋势并识别关键驱动因素"时&#xff0c;传统工具可能…

人该怎样活着呢?55

人该怎样活着呢&#xff1f; A思考现实问题并记录自己的灵感 。【生活的指南针】 &#xff08;20250212&#xff09; a1如何思考&#xff1f; 当有人问他用什么方法得到那么多发现时&#xff0c;牛顿说&#xff1a;“我只不过对于一件事情&#xff0c;总是花很长时间很热…

rtthread - V5.1.0版本 HOOK 钩子函数总结

rtthread - V5.1.0版本 钩子函数 相对于V4.0.3版本做了很大的修改和优化&#xff1a;旧版本 V4.0.3&#xff1a;rt_thread_inited_sethook(thread_inited_hook);rt_thread_deleted_sethook(thread_deleted_hook);rt_scheduler_sethook(scheduler_hook);新版本 V5.1.0&#xff1…

Python特性:装饰器解决数据库长时间断连问题

前言 在基于 Python 的 Web 应用开发里&#xff0c;数据库连接是极为关键的一环。不过&#xff0c;像网络波动、数据库服务器维护这类因素&#xff0c;都可能造成数据库长时间断连&#xff0c;进而影响应用的正常运作。本文将详细介绍怎样运用 retry_on_failure 装饰器来解决数…

疗愈之手的智慧觉醒:Deepoc具身智能如何重塑按摩机器人的触觉神经

疗愈之手的智慧觉醒&#xff1a;Deepoc具身智能如何重塑按摩机器人的触觉神经康复中心的理疗室内&#xff0c;一位运动员正俯卧在治疗床上。机械臂的硅胶触头沿腰背肌群缓缓移动&#xff0c;当传感器捕捉到竖脊肌的异常僵直时&#xff0c;触头自动切换高频震颤模式&#xff1b;…

webpack将组件vue进行编译混淆,并能正常使用编译之后的文件

介绍: 我们在开发的过程中有很多组件都需要复用,特别是我们耗费了好几天时间写出来的组件,比如自己写的表格组件,流程图组件等。总之都是自己不断测试,不断编写耗费了大把的精力写的。直接用到自己的项目中倒是无所谓,如果是把自己写的组件给别人,这里就涉及到自己的劳动…

onenote千年老bug,字体bug (calibri微软雅黑) 的解决

一、如何改这个bug&#xff08;bug是什么在后文&#xff09;一、注意1、有些onenote可能是版本问题&#xff0c;即使提供了设置默认字体的选项&#xff0c;但按教程设置后还是不work&#xff0c;建议升级版本2、亲身测过这个方法是可行的&#xff0c;如果不行&#xff0c;考虑下…

麒麟信安参编的三项软件供应链安全团体标准发布

日前&#xff0c;由中国电子商会正式发布了T/CECC 39—2025《信息安全技术 软件供应链管理规范》、T/CECC 40—2025《信息安全技术 软件供应链开源组件检测要求》以及 T/CECC 41—2025《信息安全技术 软件供应链软件产品检测要素和方法》三项重要团体标准。麒麟信安结合自身在软…

Django ORM系统

1. ORM基础概念1.1 什么是ORM&#xff1f;ORM&#xff08;Object Relational Mapping&#xff0c;对象关系映射&#xff09;是一种编程技术&#xff0c;用于在面向对象编程语言中实现不同类型系统的数据转换。在Django中&#xff0c;ORM充当业务逻辑层和数据库层之间的桥梁。核…

Tailwind CSS中设定宽度和高度的方法

在 Tailwind CSS 中&#xff0c;设定元素的宽度&#xff08;width&#xff09;和高度&#xff08;height&#xff09;有多种方式&#xff0c;涵盖固定值、相对值、响应式调整等。以下是完整的方法分类及示例&#xff1a;一、固定宽度 / 高度类以 4px (0.25rem) 为单位递增&…

Java行为型模式---备忘录模式

备忘录模式基础概念备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便后续可以将该对象恢复到先前保存的状态…