首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt 學習之路 (15):標準對話框實戰 — QFileDialog 開啟/儲存檔案完整指南

     編輯:關於C語言

Qt 內建豐富的標準對話框 (QFileDialog, QColorDialog, QFontDialog…),本篇聚焦 QFileDialog:以靜態便利函式與物件導向兩種風格實作「開啟圖片」功能,並說明跨平台原生對話框與 Qt 自繪對話框的差異。

方法一:靜態便利函式 getOpenFileName() (最簡潔)


void MainWindow::open() {
    QString path = QFileDialog::getOpenFileName(
        this,                           // 父視窗
        tr("Open Image"),               // 標題
        ".",                            // 起始目錄 (當前工作目錄)
        tr("Image Files (*.jpg *.png)") // 過濾器
    );

    if (path.isEmpty()) {
        QMessageBox::information(this, tr("Path"), tr("You didn't select any files."));
    } else {
        QMessageBox::information(this, tr("Path"), tr("You selected ") + path);
        // 後續:載入圖片、顯示於 QLabel/QGraphicsView 等
    }
}

完整函式簽名與參數說明


QString QFileDialog::getOpenFileName(
    QWidget *parent = 0,
    const QString &caption = QString(),
    const QString &dir = QString(),
    const QString &filter = QString(),
    QString *selectedFilter = 0,
    Options options = 0
);
參數說明範例
parent父視窗,用於模態層級與定位this
caption對話框標題tr("Open Image")
dir起始目錄"." (當前目錄)、"/" (根目錄)、"C:/"
filter檔案過濾器"Images (*.jpg *.png);;Text (*.txt)" (雙分號分隔多組)
selectedFilter預設選中的過濾器 (輸出參數)傳遞 QString* 接收使用者實際選擇的過濾器
options行為旗標組合DontUseNativeDialog | ShowDirsOnly

方法二:物件導向風格 QFileDialog 實例 (彈性更高)


QFileDialog *dlg = new QFileDialog(this);
dlg->setWindowTitle(tr("Open Image"));
dlg->setDirectory(".");
dlg->setNameFilter(tr("Image Files (*.jpg *.png)"));

if (dlg->exec() == QDialog::Accepted) {
    QString path = dlg->selectedFiles().first();  // 取得第一個選中檔案
    QMessageBox::information(this, tr("Path"), tr("You selected ") + path);
} else {
    QMessageBox::information(this, tr("Path"), tr("You didn't select any files."));
}
delete dlg;

兩種風格的關鍵差異

特性getOpenFileName()QFileDialog 實例
程式碼長度極短較長
對話框外觀原生 (Windows/Mac 系統風格)Qt 自繪 (跨平台一致風格)
多檔選擇改用 getOpenFileNames() 回傳 QStringListsetFileMode(QFileDialog::ExistingFiles) + selectedFiles()
自訂側邊欄/預覽不支援支援 setSidebarUrls(), setViewMode() 等

儲存檔案對話框

對稱提供 getSaveFileName() 與 QFileDialog::AcceptSave 模式,用法類似,filter 建議包含預設副檔名 (如 "Text (*.txt)") 讓使用者免輸入副檔名。

多檔案選擇範例


// 靜態函式版
QStringList files = QFileDialog::getOpenFileNames(
    this, tr("Open Images"), ".", tr("Images (*.jpg *.png)"));
foreach (const QString &f, files) { /* 處理每個檔案 */ }

// 物件版
dlg->setFileMode(QFileDialog::ExistingFiles);
if (dlg->exec() == QDialog::Accepted) {
    QStringList files = dlg->selectedFiles();
    // ...
}

本文整理自「豆子空間」博客,原文出處:https://devbean.blog.51cto.com/448512/213414

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved