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
英文地址,請注明出處:http://en.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;以便后續可以將該對象恢復到先前保存的狀態…