Exemple de boîte de dialogue à onglet
L'exemple de dialogue d'onglet montre comment construire un dialogue d'onglet à l'aide de la classe QTabWidget.
Les boîtes de dialogue constituent un moyen efficace pour l'application de communiquer avec l'utilisateur, mais les boîtes de dialogue complexes présentent l'inconvénient d'occuper trop d'espace à l'écran. En utilisant un certain nombre d'onglets dans une boîte de dialogue, les informations peuvent être réparties en différentes catégories, tout en restant accessibles.

L'exemple de la boîte de dialogue TabDialog consiste en une seule classe TabDialog qui fournit trois onglets, chacun contenant des informations sur un fichier particulier, et deux boutons standard utilisés pour accepter ou rejeter le contenu de la boîte de dialogue.
Définition de la classe TabDialog
La classe TabDialog est une sous-classe de QDialog qui affiche un QTabWidget et deux boutons de dialogue standard. La définition de la classe ne contient que le constructeur de la classe et un membre de données privé pour QTabWidget:
class TabDialog : public QDialog { Q_OBJECT public: explicit TabDialog(const QString &fileName, QWidget *parent = nullptr); private: QTabWidget *tabWidget; QDialogButtonBox *buttonBox; };
Dans l'exemple, le widget sera utilisé comme fenêtre de premier niveau, mais nous définissons le constructeur de manière à ce qu'il puisse prendre un widget parent. Cela permet de centrer la boîte de dialogue au-dessus de la fenêtre principale d'une application.
Mise en œuvre de la classe TabDialog
Le constructeur appelle le constructeur QDialog et crée un objet QFileInfo pour le nom de fichier spécifié.
TabDialog::TabDialog(const QString &fileName, QWidget *parent) : QDialog(parent) { QFileInfo fileInfo(fileName); tabWidget = new QTabWidget; tabWidget->addTab(new GeneralTab(fileInfo), tr("General")); tabWidget->addTab(new PermissionsTab(fileInfo), tr("Permissions")); tabWidget->addTab(new ApplicationsTab(fileInfo), tr("Applications"));
Le widget tab est peuplé de trois widgets personnalisés qui contiennent chacun des informations sur le fichier. Nous construisons chacun de ces widgets sans widget parent, car le widget tab les répartira au fur et à mesure qu'ils lui seront ajoutés.
Nous créons deux boutons-poussoirs standard et les connectons aux emplacements appropriés dans la boîte de dialogue :
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
Nous plaçons le widget à onglets au-dessus des boutons dans la boîte de dialogue :
QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(tabWidget); mainLayout->addWidget(buttonBox); setLayout(mainLayout);
Enfin, nous définissons le titre de la boîte de dialogue :
setWindowTitle(tr("Tab Dialog"));
}Chacun des onglets est une sous-classe de QWidget, et ne fournit que des constructeurs.
Définition de la classe GeneralTab
La définition du widget GeneralTab est simple car nous ne nous intéressons qu'à l'affichage du contenu d'un widget dans un onglet :
class GeneralTab : public QWidget { Q_OBJECT public: explicit GeneralTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); };
Mise en œuvre de la classe GeneralTab
Le widget GeneralTab affiche simplement des informations sur le fichier transmis par le TabDialog. Différents widgets sont prévus à cet effet et sont disposés verticalement :
GeneralTab::GeneralTab(const QFileInfo &fileInfo, QWidget *parent) : QWidget(parent) { QLabel *fileNameLabel = new QLabel(tr("File Name:")); QLineEdit *fileNameEdit = new QLineEdit(fileInfo.fileName()); QLabel *pathLabel = new QLabel(tr("Path:")); QLabel *pathValueLabel = new QLabel(fileInfo.absoluteFilePath()); pathValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QLabel *sizeLabel = new QLabel(tr("Size:")); qlonglong size = fileInfo.size()/1024; QLabel *sizeValueLabel = new QLabel(tr("%1 K").arg(size)); sizeValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QLabel *lastReadLabel = new QLabel(tr("Last Read:")); QLabel *lastReadValueLabel = new QLabel(fileInfo.lastRead().toString()); lastReadValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QLabel *lastModLabel = new QLabel(tr("Last Modified:")); QLabel *lastModValueLabel = new QLabel(fileInfo.lastModified().toString()); lastModValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(fileNameLabel); mainLayout->addWidget(fileNameEdit); mainLayout->addWidget(pathLabel); mainLayout->addWidget(pathValueLabel); mainLayout->addWidget(sizeLabel); mainLayout->addWidget(sizeValueLabel); mainLayout->addWidget(lastReadLabel); mainLayout->addWidget(lastReadValueLabel); mainLayout->addWidget(lastModLabel); mainLayout->addWidget(lastModValueLabel); mainLayout->addStretch(1); setLayout(mainLayout); }
Définition de la classe PermissionsTab
Comme le GeneralTab, le PermissionsTab est simplement utilisé comme widget de remplacement pour ses enfants :
class PermissionsTab : public QWidget { Q_OBJECT public: explicit PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); };
Mise en œuvre de la classe PermissionsTab
L'onglet PermissionsTab fournit des informations sur l'accès au fichier, en affichant les détails des autorisations et du propriétaire du fichier dans des widgets disposés de manière imbriquée :
PermissionsTab::PermissionsTab(const QFileInfo &fileInfo, QWidget *parent) : QWidget(parent) { QGroupBox *permissionsGroup = new QGroupBox(tr("Permissions")); QCheckBox *readable = new QCheckBox(tr("Readable")); if (fileInfo.isReadable()) readable->setChecked(true); QCheckBox *writable = new QCheckBox(tr("Writable")); if ( fileInfo.isWritable() ) writable->setChecked(true); QCheckBox *executable = new QCheckBox(tr("Executable")); if ( fileInfo.isExecutable() ) executable->setChecked(true); QGroupBox *ownerGroup = new QGroupBox(tr("Ownership")); QLabel *ownerLabel = new QLabel(tr("Owner")); QLabel *ownerValueLabel = new QLabel(fileInfo.owner()); ownerValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QLabel *groupLabel = new QLabel(tr("Group")); QLabel *groupValueLabel = new QLabel(fileInfo.group()); groupValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); QVBoxLayout *permissionsLayout = new QVBoxLayout; permissionsLayout->addWidget(readable); permissionsLayout->addWidget(writable); permissionsLayout->addWidget(executable); permissionsGroup->setLayout(permissionsLayout); QVBoxLayout *ownerLayout = new QVBoxLayout; ownerLayout->addWidget(ownerLabel); ownerLayout->addWidget(ownerValueLabel); ownerLayout->addWidget(groupLabel); ownerLayout->addWidget(groupValueLabel); ownerGroup->setLayout(ownerLayout); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(permissionsGroup); mainLayout->addWidget(ownerGroup); mainLayout->addStretch(1); setLayout(mainLayout); }
Définition de la classe ApplicationsTab
L'onglet Applications est un autre widget de type placeholder qui est essentiellement cosmétique :
class ApplicationsTab : public QWidget { Q_OBJECT public: explicit ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); };
Mise en œuvre de la classe ApplicationsTab
L'ApplicationsTab n'affiche aucune information utile, mais peut être utilisé comme modèle pour un exemple plus compliqué :
ApplicationsTab::ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent) : QWidget(parent) { QLabel *topLabel = new QLabel(tr("Open with:")); QListWidget *applicationsListBox = new QListWidget; QStringList applications; for (int i = 1; i <= 30; ++i) applications.append(tr("Application %1").arg(i)); applicationsListBox->insertItems(0, applications); QCheckBox *alwaysCheckBox; if (fileInfo.suffix().isEmpty()) alwaysCheckBox = new QCheckBox(tr("Always use this application to " "open this type of file")); else alwaysCheckBox = new QCheckBox(tr("Always use this application to " "open files with the extension '%1'").arg(fileInfo.suffix())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(topLabel); layout->addWidget(applicationsListBox); layout->addWidget(alwaysCheckBox); setLayout(layout); }
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.