C++ Qt開發:標準Dialog對話方塊元件

2023-12-17 12:00:23

Qt 是一個跨平臺C++圖形介面開發庫,利用Qt可以快速開發跨平臺表單應用程式,在Qt中我們可以通過拖拽的方式將不同元件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹標準對話方塊QInputDialogQFileDialog 這兩種對話方塊元件的常用方法及靈活運用。

在 Qt 中,標準對話方塊提供了一些常見的使用者互動介面,用於執行特定任務,例如獲取使用者輸入、選擇檔案路徑、顯示訊息等。這些對話方塊通常具有標準化的外觀和行為,使得在不同的平臺上能夠保持一致性。在一般的開發過程中,標準對話方塊是開發者常用的工具之一。

1.1 QInputDialog

QInputDialog 類提供了一種簡單的方法,用於獲取使用者的輸入。它可以用於獲取文字、整數、浮點數等型別的輸入。

以下是 QInputDialog 類的一些常用方法的說明和概述,以表格形式列出:

方法 描述
getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> QString 顯示一個文字輸入對話方塊,返回使用者輸入的文字。
getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int minValue = -2147483647, int maxValue = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> int 顯示一個整數輸入對話方塊,返回使用者輸入的整數。
getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double minValue = -2147483647, double maxValue = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> double 顯示一個浮點數輸入對話方塊,返回使用者輸入的浮點數。
getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) -> QString 顯示一個列表輸入對話方塊,返回使用者選擇的項。
getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> QString 顯示一個多行文字輸入對話方塊,返回使用者輸入的文字。

這些方法提供了不同型別的輸入對話方塊,包括文字、整數、浮點數、列表等。通過這些方法,開發者可以方便地與使用者互動,獲取使用者輸入的資訊。需要注意的是,這些方法都是靜態方法,可以直接通過類名 QInputDialog 呼叫。

為了方便展示這四種標準輸入框的使用,此處讀者可自行繪製如下所示的頁面UI佈局,並自行匯入#include <QInputDialog>#include <QLineEdit>兩個標頭檔案;

1.1.3 文字輸入

通過getText方法實現,QInputDialog::getText 是 Qt 中用於顯示一個簡單的對話方塊,其中包含一個用於輸入文字的欄位的靜態方法。這個方法通常用於獲取使用者輸入的文字。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • label: 輸入欄位上方的文字標籤。
  • echo: 輸入文字時的回顯模式,可以是 QLineEdit::NormalQLineEdit::NoEcho 等。
  • text: 初始文字。
  • ok: 一個布林指標,用於獲取對話方塊的 OK 按鈕的狀態。
  • flags: 可選的視窗標誌。

方法返回使用者輸入的文字,如果使用者取消了對話方塊,則返回一個空字串。你可以根據需要調整標籤、初始文字、回顯模式等引數,以滿足你的具體需求。

該方法要求使用者傳入標題EchoMode等必備引數,需要注意的是如果讀者想要輸入時隱藏顯示文字則可以直接設定QLineEdit::Password為密碼模式,此時輸入的密碼將會被*號代替,程式碼如下;

void MainWindow::on_pushButton_text_clicked()
{
    QString dlgTitle="輸入文字對話方塊";
    QString txtLabel="請輸入檔名";
    QString defaultInput="新建檔案.txt";
    QLineEdit::EchoMode echoMode=QLineEdit::Normal;       // 正常文字輸入
    // QLineEdit::EchoMode echoMode=QLineEdit::Password;  // 密碼輸入

    bool flag = false;
    QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &flag);
    if (flag && !text.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(text);
    }
}

程式碼執行後點選文字輸入按鈕,則可彈出輸入框,如下所示;

1.1.2 整數輸入

通過getInt方法實現,QInputDialog::getInt 是 Qt 中用於顯示一個簡單的對話方塊,其中包含一個用於輸入整數的欄位的靜態方法。這個方法通常用於獲取使用者輸入的整數。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • label: 輸入欄位上方的文字標籤。
  • value: 初始值。
  • min: 最小值。
  • max: 最大值。
  • step: 步長,表示每次增減的量。
  • ok: 一個布林指標,用於獲取對話方塊的 OK 按鈕的狀態。
  • flags: 可選的視窗標誌。

方法返回使用者輸入的整數,如果使用者取消了對話方塊,則返回 0。你可以根據需要調整標籤、初始值、範圍、步長等引數,以滿足你的具體需求。

該方法提供了一個SpinBox選擇框,在輸入時可以通過傳入minValue限制最小值,maxValue限制最大值,通過stepValue設定每次步長,程式碼如下;

void MainWindow::on_pushButton_int_clicked()
{
    QString dlgTitle="輸入整數對話方塊";
    QString txtLabel="設定字型大小";
    int defaultValue=ui->plainTextEdit->font().pointSize();   // 現有字型大小
    int minValue=6, maxValue=50, stepValue=1;                 // 範圍(步長)
    bool flag=false;
    int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,stepValue,&flag);
    if (flag)
    {
        QFont font=ui->plainTextEdit->font();
        font.setPointSize(inputValue);
        ui->plainTextEdit->setFont(font);

        // 顯示在編輯框內
        QString stringValue = QString::number(inputValue);
        ui->plainTextEdit->appendPlainText(stringValue);
    }
}

程式碼執行後點選整數輸入按鈕,則可彈出輸入框,整數選擇最小被限制在了6而最大限制為50,如下所示;

1.1.3 浮點數輸入

通過getDouble方法實現,QInputDialog::getDouble 是 Qt 中用於顯示一個簡單的對話方塊,其中包含一個用於輸入浮點數的欄位的靜態方法。這個方法通常用於獲取使用者輸入的浮點數。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • label: 輸入欄位上方的文字標籤。
  • value: 初始值。
  • min: 最小值。
  • max: 最大值。
  • decimals: 小數位數。
  • ok: 一個布林指標,用於獲取對話方塊的 OK 按鈕的狀態。
  • flags: 可選的視窗標誌。

方法返回使用者輸入的浮點數,如果使用者取消了對話方塊,則返回 0.0。你可以根據需要調整標籤、初始值、範圍、小數位數等引數,以滿足你的具體需求。

該方法提供了一個SpinBox選擇框,浮點數的輸入同樣可以限制輸入長度,同時浮點數也可以指定小數點的位數,通過decimals指定為兩位顯示,程式碼如下;

void MainWindow::on_pushButton_float_clicked()
{
    QString dlgTitle="輸入浮點數對話方塊";
    QString txtLabel="輸入一個浮點數";
    float defaultValue=3.13;

    float minValue=0, maxValue=10000;  // 範圍
    int decimals=2;                    // 小數點位數

    bool flag=false;
    float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag);
    if (flag)
    {
        QString str=QString::asprintf("輸入了一個浮點數:%.2f",inputValue);
        ui->plainTextEdit->appendPlainText(str);
    }
}

程式碼執行後點選浮點數輸入按鈕,則可彈出輸入框,浮點數選擇最小被限制在了0而最大限制為10000,預設值為3.13保留長度為兩位,如下所示;

1.1.4 單選框輸入

通過getItem方法實現,該方法適合於只讓使用者選擇特定的內容,QInputDialog::getItem 是 Qt 中用於顯示一個簡單的對話方塊,其中包含一個下拉框(QComboBox)供使用者選擇的靜態方法。這個方法通常用於獲取使用者從列表中選擇的項。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • label: 下拉框上方的文字標籤。
  • items: 字串列表,表示下拉框中的選項。
  • currentItem: 初始時被選中的項的索引。
  • editable: 是否允許使用者編輯下拉框中的文字。
  • ok: 一個布林指標,用於獲取對話方塊的 OK 按鈕的狀態。在這個例子中,我們傳遞了 nullptr,因為我們不關心 OK 按鈕的狀態。
  • flags: 可選的視窗標誌。

方法返回使用者選擇的項,如果使用者取消了對話方塊,則返回一個空字串。你可以根據需要調整標籤、初始選中項、是否可編輯等引數,以滿足你的具體需求。程式碼如下所示;

void MainWindow::on_pushButton_checkbox_clicked()
{
    QStringList items;                        // 列表內容
    items <<"優秀"<<"良好"<<"合格"<<"不合格";    // 放入列表

    QString dlgTitle="條目選擇對話方塊";
    QString txtLabel="請選擇級別";
    int curIndex=0;                            // 初始選擇項
    bool editable=false;                       // 是否可編輯
    bool flag=false;
    QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&flag);

    if (flag && !text.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(text);
    }
}

程式碼執行後點選單選框輸入按鈕,則可彈出單選框表單,讀者可選擇對應的選項,如下所示;

2.1 QFileDialog

QFileDialog 類用於開啟和儲存檔案的標準對話方塊。它提供了使用者友好的介面,使得使用者可以輕鬆地選擇檔案或目錄,在使用時同樣需要匯入#include <QFileDialog>標頭檔案。

以下是 QFileDialog 類的一些常用方法的說明和概述,以表格形式列出:

方法 描述
getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 開啟檔案對話方塊,獲取使用者選擇的檔名。
getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 開啟檔案對話方塊,獲取使用者選擇的多個檔名。
getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 儲存檔案對話方塊,獲取使用者輸入的檔名。
getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), Options options = ShowDirsOnlyDontResolveSymlinks) 用於在檔案系統中獲取現有目錄的路徑。
getExistingDirectoryUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), QFileDialog::Options options = ShowDirsOnlyDontResolveSymlinks) 用於在檔案系統中獲取現有目錄的路徑。
getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 儲存檔案對話方塊,獲取使用者輸入的檔案的 URL。
getOpenFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 開啟檔案對話方塊,獲取使用者選擇的檔案的 URL。
getOpenFileUrls(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 開啟檔案對話方塊,獲取使用者選擇的多個檔案的 URL。
getSaveFileUrls(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, Options options = 0) 儲存檔案對話方塊,獲取使用者輸入的多個檔案的 URL。
setLabelText(QFileDialog::DialogLabel label, const QString &text) 設定對話方塊中指定標籤的文字。
setLabelText(QFileDialog::DialogLabel label, const QUrl &url) 設定對話方塊中指定標籤的文字為 URL。
setOption(QFileDialog::Option option, bool on = true) 啟用或禁用對話方塊的指定選項。
setOptions(QFileDialog::Options options) 設定對話方塊的選項。
setFileMode(QFileDialog::FileMode mode) 設定對話方塊的檔案模式(開啟、儲存、目錄選擇等)。
setAcceptMode(QFileDialog::AcceptMode mode) 設定對話方塊的接受模式,是開啟檔案還是儲存檔案。
setViewMode(QFileDialog::ViewMode mode) 設定對話方塊的檢視模式,如詳細檢視、圖示檢視等。
setDirectory(const QString &directory) 設定對話方塊開啟時的預設目錄。
setDirectoryUrl(const QUrl &directory) 設定對話方塊開啟時的預設目錄的 URL。
setFilter(const QString &filter) 設定對話方塊的檔案型別過濾器,如"文字檔案 (.txt);;所有檔案 ()"。
setNameFilter(const QString &filter) 設定對話方塊的檔名過濾器,如"*.txt"。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。
setLabelText(QFileDialog::DialogLabel label, const QString &text) 設定對話方塊中指定標籤的文字。
setLabelText(QFileDialog::DialogLabel label, const QUrl &url) 設定對話方塊中指定標籤的文字為 URL。
setOption(QFileDialog::Option option, bool on = true) 啟用或禁用對話方塊的指定選項。
setOptions(QFileDialog::Options options) 設定對話方塊的選項。
setFileMode(QFileDialog::FileMode mode) 設定對話方塊的檔案模式(開啟、儲存、目錄選擇等)。
setAcceptMode(QFileDialog::AcceptMode mode) 設定對話方塊的接受模式,是開啟檔案還是儲存檔案。
setViewMode(QFileDialog::ViewMode mode) 設定對話方塊的檢視模式,如詳細檢視、圖示檢視等。
setDirectory(const QString &directory) 設定對話方塊開啟時的預設目錄。
setDirectoryUrl(const QUrl &directory) 設定對話方塊開啟時的預設目錄的 URL。
setFilter(const QString &filter) 設定對話方塊的檔案型別過濾器,如"文字檔案 (.txt);;所有檔案 ()"。
setNameFilter(const QString &filter) 設定對話方塊的檔名過濾器,如"*.txt"。
setDefaultSuffix(const QString &suffix) 設定預設的檔案字尾,用於在使用者未指定檔案字尾時追加到檔名。
setMimeTypeFilters(const QStringList &filters) 設定對話方塊的 MIME 型別過濾器。
setSidebarUrls(const QList<QUrl> &urls) 設定對話方塊側邊欄的 URL 列表。
setProxyModel(QAbstractProxyModel *proxyModel) 設定對話方塊使用的代理模型。
setHistory(const QStringList &paths) 設定對話方塊歷史記錄的路徑列表。

這些方法提供了一系列功能,包括開啟檔案、儲存檔案、選擇目錄等,以及對對話方塊的一些屬性進行設定。這樣,開發者可以方便地使用這些方法構建出符合應用需求的檔案對話方塊。需要注意的是,這些方法中的許多引數都有預設值,因此在大多數情況下,開發者可以選擇性地呼叫這些方法。

2.1.1 選擇檔案

在選擇單個檔案時可以通過呼叫getOpenFileName方法實現,QFileDialog::getOpenFileName 是 Qt 中用於顯示開啟檔案對話方塊並獲取使用者選擇的檔名的靜態方法。它通常用於在使用者需要選擇一個檔案進行開啟操作時,例如載入檔案等場景。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • dir: 預設的目錄路徑。
  • filter: 檔案型別過濾器,用於篩選可開啟的檔案型別。可以使用分號分隔多個過濾器,例如 "Text Files (*.txt);;All Files (*)"

方法返回使用者選擇的檔名,如果使用者取消了對話方塊,則返回一個空字串。你可以根據需要調整過濾器、預設目錄等引數,以滿足你的具體需求。

通過最後一個引數來指定需要開啟的檔案型別,通常可傳入一組字串來實現過濾,當開啟後可以通過aFileName拿到檔案具體路徑,程式碼如下;

void MainWindow::on_pushButton_file_clicked()
{
    QString curPath=QDir::currentPath();                                       // 獲取系統當前目錄
    //  QString  curPath=QCoreApplication::applicationDirPath();               // 獲取應用程式的路徑
    QString dlgTitle="選擇一個檔案";                                             // 對話方塊標題
    QString filter="文字檔案(*.txt);;圖片檔案(*.jpg *.gif *.png);;所有檔案(*.*)";  // 檔案過濾器

    QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);

    if (!aFileName.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(aFileName);
    }
}

開啟效果圖如下所示;

同理,當我們需要選擇多個檔案並開啟時只需要將QString修改為QStringList這樣當檔案被開啟後則可以通過迴圈輸出fileList列表來獲取所有路徑資訊,如下程式碼所示;

void MainWindow::on_pushButton_multiple_clicked()
{
    // QString curPath=QCoreApplication::applicationDirPath();                // 獲取應用程式的路徑
    QString curPath=QDir::currentPath();                                      // 獲取系統當前目錄
    QString dlgTitle="選擇多個檔案";                                            // 對話方塊標題
    QString filter="文字檔案(*.txt);;圖片檔案(*.jpg *.gif *.png);;所有檔案(*.*)"; // 檔案過濾器

    QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
    for (int i=0; i<fileList.count();i++)
    {
        // 迴圈將檔案路徑新增到列表中
        ui->plainTextEdit->appendPlainText(fileList.at(i));
    }
}

在選擇時可以通過拖拽選中的方式選擇多個檔案,如下圖所示;

2.1.2 選擇目錄

選擇目錄時可以呼叫getExistingDirectory方法,QFileDialog::getExistingDirectory 是 Qt 中用於顯示選擇目錄對話方塊並獲取使用者選擇的目錄的靜態方法。它通常用於在使用者需要選擇一個目錄時,例如儲存檔案到特定目錄或載入檔案等場景。

方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • dir: 預設的目錄路徑。
  • options: 對話方塊的選項。在範例中,使用了 QFileDialog::ShowDirsOnly 表示只顯示目錄,並且 QFileDialog::DontResolveSymlinks 表示不解析符號連結。

方法返回使用者選擇的目錄路徑,如果使用者取消了對話方塊,則返回一個空字串。你可以根據需要調整預設目錄、選項等引數,以滿足你的具體需求。

void MainWindow::on_pushButton_dirfile_clicked()
{
    QString curPath=QCoreApplication::applicationDirPath();    // 獲取應用程式的路徑
    // QString curPath=QDir::currentPath();                    // 獲取系統當前目錄

    // 呼叫開啟檔案對話方塊開啟一個檔案
    QString dlgTitle="選擇一個目錄";                             // 對話方塊標題
    QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
    if (!selectedDir.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(selectedDir);
    }
}

選擇目錄輸出效果圖如下所示;

2.1.3 儲存檔案

儲存檔案可以通過呼叫getSaveFileName方法來實現,QFileDialog::getSaveFileName 是 Qt 中用於顯示儲存檔案對話方塊並獲取使用者選擇的檔名的靜態方法。它通常用於在使用者將檔案儲存到磁碟時獲取檔案的儲存路徑。

該方法的引數包括:

  • parent: 對話方塊的父視窗。傳入 nullptr 表示沒有父視窗。
  • caption: 對話方塊的標題。
  • dir: 預設的目錄路徑。
  • filter: 檔案型別過濾器,用於篩選可儲存的檔案型別。可以使用分號分隔多個過濾器,例如 "Text Files (*.txt);;All Files (*)"

方法返回使用者選擇的檔名,如果使用者取消了對話方塊,則返回一個空字串。你可以根據需要調整過濾器、預設目錄等引數,以滿足你的具體需求。

void MainWindow::on_pushButton_save_clicked()
{
    QString curPath=QCoreApplication::applicationDirPath();                  // 獲取應用程式的路徑
    QString dlgTitle="儲存檔案";                                              // 對話方塊標題
    QString filter="文字檔案(*.txt);;h檔案(*.h);;C++檔案(.cpp);;所有檔案(*.*)"; // 檔案過濾器
    QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
    if (!aFileName.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(aFileName);
    }
}

儲存檔案對話方塊如下圖所示,當點選後則可以將檔案儲存到特定目錄下;