「分頁對話框」示範如何使用 QTabWidget 建構含多個分頁的對話框。透過分頁將複雜資訊分類,避免單一對話框佔用過多螢幕空間。範例包含 TabDialog 主類別與三個自訂分頁(GeneralTab、PermissionsTab、ApplicationsTab),以及標準的「確定/取消」按鈕。
class TabDialog : public QDialog {
Q_OBJECT
public:
explicit TabDialog(const QString &fileName, QWidget *parent = nullptr);
private:
QTabWidget *tabWidget;
QDialogButtonBox *buttonBox;
};
QDialog,支援作為獨立視窗或嵌入父視窗。QFileInfo 取得檔案資訊。QTabWidget 並加入三個分頁:
tabWidget = new QTabWidget;
tabWidget->addTab(new GeneralTab(fileInfo), tr("General"));
tabWidget->addTab(new PermissionsTab(fileInfo), tr("Permissions"));
tabWidget->addTab(new ApplicationsTab(fileInfo), tr("Applications"));
注意:分頁元件未指定父物件,因 addTab 會自動設為子物件。buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
QVBoxLayout 垂直排版:分頁在上、按鈕在下。
setWindowTitle(tr("Tab Dialog"));QWidget,僅提供建構子。QVBoxLayout 排列標籤與顯示元件:檔名、路徑、大小、最後讀取/修改時間。QLabel 並設定 QFrame::Panel | QFrame::Sunken 邊框風格。QLineEdit 允許編輯。addStretch(1) 讓內容靠頂對齊。QLabel *pathLabel = new QLabel(tr("Path:"));
QLabel *pathValueLabel = new QLabel(fileInfo.absoluteFilePath());
pathValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
// ... 類似處理 size, lastRead, lastMod
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(fileNameLabel);
mainLayout->addWidget(fileNameEdit);
mainLayout->addWidget(pathLabel);
mainLayout->addWidget(pathValueLabel);
// ...
mainLayout->addStretch(1);
setLayout(mainLayout);
結構與 GeneralTab 類似,分別顯示檔案權限資訊與關聯應用程式,此處略過重複代碼。
QTabWidget 是建構分頁介面的核心容器。QWidget 子類別,職責單一。QDialogButtonBox 提供跨平台一致的標準按鈕語意。tr() 支援多國語系。本文翻譯整理自「阿潘的兔子」博客,原文出處:作者部落格 | 來源:Qt 官方範例 Tab Dialog