Sur cette page

QDataWidgetMapper Class

La classe QDataWidgetMapper fournit une correspondance entre une section d'un modèle de données et des widgets. Plus d'informations...

En-tête : #include <QDataWidgetMapper>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Héritages : QObject

Types publics

enum SubmitPolicy { AutoSubmit, ManualSubmit }

Propriétés

Fonctions publiques

QDataWidgetMapper(QObject *parent = nullptr)
virtual ~QDataWidgetMapper()
void addMapping(QWidget *widget, int section)
void addMapping(QWidget *widget, int section, const QByteArray &propertyName)
void clearMapping()
int currentIndex() const
QAbstractItemDelegate *itemDelegate() const
QByteArray mappedPropertyName(QWidget *widget) const
int mappedSection(QWidget *widget) const
QWidget *mappedWidgetAt(int section) const
QAbstractItemModel *model() const
Qt::Orientation orientation() const
void removeMapping(QWidget *widget)
QModelIndex rootIndex() const
void setItemDelegate(QAbstractItemDelegate *delegate)
void setModel(QAbstractItemModel *model)
void setOrientation(Qt::Orientation aOrientation)
void setRootIndex(const QModelIndex &index)
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)
QDataWidgetMapper::SubmitPolicy submitPolicy() const

Emplacements publics

void revert()
virtual void setCurrentIndex(int index)
void setCurrentModelIndex(const QModelIndex &index)
bool submit()
void toFirst()
void toLast()
void toNext()
void toPrevious()

Signaux

void currentIndexChanged(int index)

Description détaillée

QDataWidgetMapper peut être utilisé pour créer des widgets sensibles aux données en les associant à des sections d'un modèle d'élément. Une section est une colonne d'un modèle si l'orientation est horizontale (par défaut), sinon une ligne.

Chaque fois que l'index courant change, chaque widget est mis à jour avec les données du modèle par l'intermédiaire de la propriété spécifiée lors de la mise en correspondance. Si l'utilisateur modifie le contenu d'un widget, les modifications sont lues à l'aide de la même propriété et réécrites dans le modèle. Par défaut, le site user property de chaque widget est utilisé pour transférer les données entre le modèle et le widget. Depuis Qt 4.3, une fonction supplémentaire addMapping() permet d'utiliser une propriété nommée au lieu de la propriété utilisateur par défaut.

Il est possible de définir un délégué d'élément pour prendre en charge les widgets personnalisés. Par défaut, un QStyledItemDelegate est utilisé pour synchroniser le modèle avec les widgets.

Supposons que nous ayons un modèle d'élément nommé model avec le contenu suivant :

1Qt NorwayOslo
2Qt AustralieBrisbane
3Qt USAPalo Alto
4Qt ChinePékin
5Qt AllemagneBerlin

Le code suivant associe les colonnes du modèle à des widgets appelés mySpinBox, myLineEdit et myCountryChooser:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();

Après l'appel à toFirst(), mySpinBox affiche la valeur 1, myLineEdit affiche Qt Norway et myCountryChooser affiche Oslo. Les fonctions de navigation toFirst(), toNext(), toPrevious(), toLast() et setCurrentIndex() peuvent être utilisées pour naviguer dans le modèle et mettre à jour les widgets avec le contenu du modèle.

La fonction setRootIndex() permet de spécifier un élément particulier d'un modèle en tant qu'index racine - les enfants de cet élément seront affectés aux widgets correspondants dans l'interface utilisateur.

QDataWidgetMapper prend en charge deux politiques de soumission, AutoSubmit et ManualSubmit. AutoSubmit met à jour le modèle dès que le widget actuel perd le focus, ManualSubmit ne met à jour le modèle que si submit() est appelé. ManualSubmit est utile pour afficher une boîte de dialogue qui permet à l'utilisateur d'annuler toutes les modifications. De même, les autres vues qui affichent le modèle ne seront pas mises à jour tant que l'utilisateur n'aura pas terminé toutes ses modifications et ne les aura pas soumises.

Notez que QDataWidgetMapper garde la trace des modifications externes. Si le contenu du modèle est mis à jour dans un autre module de l'application, les widgets sont également mis à jour.

Voir également QAbstractItemModel et QAbstractItemDelegate.

Documentation sur les types de membres

enum QDataWidgetMapper::SubmitPolicy

Cette énumération décrit les politiques de soumission possibles pour QDataWidgetMapper.

ConstanteValeurDescription
QDataWidgetMapper::AutoSubmit0Chaque fois qu'un widget perd le focus, sa valeur actuelle est fixée au modèle de l'élément.
QDataWidgetMapper::ManualSubmit1Le modèle n'est pas mis à jour jusqu'à ce que submit() soit appelé.

Documentation sur les propriétés

currentIndex : int

Cette propriété contient la ligne ou la colonne actuelle

Les widgets sont alimentés par les données de la ligne à l'adresse index si l'orientation est horizontale (par défaut), sinon par les données de la colonne à l'adresse index.

Fonctions d'accès :

int currentIndex() const
virtual void setCurrentIndex(int index)

Signal Notifier :

void currentIndexChanged(int index)

Voir aussi setCurrentModelIndex(), toFirst(), toNext(), toPrevious() et toLast().

orientation : Qt::Orientation

Cette propriété indique l'orientation du modèle

Si l'orientation est Qt::Horizontal (par défaut), un widget est associé à une colonne d'un modèle de données. Le widget sera alimenté par les données du modèle provenant de la colonne mappée et de la ligne sur laquelle currentIndex() pointe.

Utilisez Qt::Horizontal pour les données tabulaires qui ressemblent à ceci :

1Qt NorvègeOslo
2Qt AustralieBrisbane
3Qt USASilicon Valley
4Qt ChinePékin
5Qt AllemagneBerlin

Si l'orientation est définie sur Qt::Vertical, un widget est associé à une ligne. L'appel à setCurrentIndex() changera la colonne courante. Le widget sera alimenté par les données du modèle provenant de sa ligne mappée et de la colonne sur laquelle currentIndex() pointe.

Utilisez Qt::Vertical pour les données tabulaires qui ressemblent à ceci :

12345
Qt NorvègeQt AustralieQt USAQt ChineQt Allemagne
OsloBrisbaneSilicon ValleyPékin (en anglais)Berlin

Le changement d'orientation efface toutes les correspondances existantes.

Fonctions d'accès :

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation aOrientation)

submitPolicy : SubmitPolicy

Cette propriété contient la politique de soumission actuelle

Le fait de modifier la politique de soumission actuelle ramènera tous les widgets aux données actuelles du modèle.

Fonctions d'accès :

QDataWidgetMapper::SubmitPolicy submitPolicy() const
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)

Documentation des fonctions membres

[explicit] QDataWidgetMapper::QDataWidgetMapper(QObject *parent = nullptr)

Construit un nouveau QDataWidgetMapper avec l'objet parent parent. Par défaut, l'orientation est horizontale et la politique de soumission est AutoSubmit.

Voir également setOrientation() et setSubmitPolicy().

[virtual noexcept] QDataWidgetMapper::~QDataWidgetMapper()

Détruit l'objet.

void QDataWidgetMapper::addMapping(QWidget *widget, int section)

Ajoute une correspondance entre un widget et un section du modèle. Le section est une colonne du modèle si l'orientation est horizontale (par défaut), sinon une ligne.

Dans l'exemple suivant, nous supposons que le modèle myModel comporte deux colonnes : la première contient les noms des personnes d'un groupe et la seconde leur âge. La première colonne est mappée sur QLineEdit nameLineEdit , et la seconde sur QSpinBox ageSpinBox :

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(myModel);
mapper->addMapping(nameLineEdit, 0);
mapper->addMapping(ageSpinBox, 1);

Remarques :

  • Si le site widget est déjà associé à une section, l'ancienne correspondance sera remplacée par la nouvelle.
  • Seules les correspondances biunivoques entre les sections et les widgets sont autorisées. Il n'est pas possible d'associer une section à plusieurs widgets, ni un widget à plusieurs sections.

Voir également removeMapping(), mappedSection() et clearMapping().

void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)

Essentiellement la même chose que addMapping(), mais ajoute la possibilité de spécifier la propriété à utiliser en spécifiant propertyName.

Voir également addMapping().

void QDataWidgetMapper::clearMapping()

Efface toutes les correspondances.

Voir aussi addMapping() et removeMapping().

[signal] void QDataWidgetMapper::currentIndexChanged(int index)

Ce signal est émis après que l'index courant a changé et que tous les widgets ont été remplis avec de nouvelles données. index est le nouvel index courant.

Note : Signal de notification pour la propriété currentIndex.

Voir aussi currentIndex() et setCurrentIndex().

QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const

Renvoie le délégué de l'élément actuel.

Voir aussi setItemDelegate().

QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const

Renvoie le nom de la propriété utilisée lors de la mise en correspondance des données avec l'adresse widget.

Voir aussi mappedSection(), addMapping() et removeMapping().

int QDataWidgetMapper::mappedSection(QWidget *widget) const

Renvoie la section à laquelle le widget est rattaché ou -1 si le widget n'est pas rattaché.

Voir aussi addMapping() et removeMapping().

QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const

Renvoie le widget qui est mappé à section, ou 0 si aucun widget n'est mappé à cette section.

Voir aussi addMapping() et removeMapping().

QAbstractItemModel *QDataWidgetMapper::model() const

Renvoie le modèle actuel.

Voir aussi setModel().

void QDataWidgetMapper::removeMapping(QWidget *widget)

Supprime le mappage pour l'adresse widget donnée.

Voir aussi addMapping() et clearMapping().

[slot] void QDataWidgetMapper::revert()

Remplit tous les widgets avec les données actuelles du modèle. Toutes les modifications non soumises seront perdues.

Voir aussi submit() et setSubmitPolicy().

QModelIndex QDataWidgetMapper::rootIndex() const

Renvoie l'index actuel de la racine.

Voir aussi setRootIndex().

[slot] void QDataWidgetMapper::setCurrentModelIndex(const QModelIndex &index)

Fixe l'index actuel à la ligne de index si l'orientation est horizontale (par défaut), sinon à la colonne de index.

Appelle setCurrentIndex() en interne. Ce slot de commodité peut être connecté au signal currentRowChanged() ou currentColumnChanged() d'une autre vue selection model.

L'exemple suivant illustre comment mettre à jour tous les widgets avec de nouvelles données lorsque la sélection d'un QTableView nommé myTableView change :

QDataWidgetMapper *mapper = new QDataWidgetMapper;
connect(myTableView->selectionModel(), &QItemSelectionModel::currentRowChanged,
        mapper, &QDataWidgetMapper::setCurrentModelIndex);

Voir aussi currentIndex().

void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)

Définit le délégué de l'élément à delegate. Le délégué sera utilisé pour écrire les données du modèle dans le widget et du widget vers le modèle, en utilisant QAbstractItemDelegate::setEditorData() et QAbstractItemDelegate::setModelData().

Tout délégué existant sera supprimé, mais pas effacé. QDataWidgetMapper n'est pas propriétaire de delegate.

Le délégué décide également quand appliquer les données et quand changer l'éditeur, en utilisant QAbstractItemDelegate::commitData() et QAbstractItemDelegate::closeEditor().

Attention : Vous ne devez pas partager la même instance d'un délégué entre des mappeurs de widgets ou des vues. En effet, chaque vue connectée à un délégué donné peut recevoir le signal closeEditor() et tenter d'accéder, de modifier ou de fermer un éditeur qui a déjà été fermé.

Voir également itemDelegate().

void QDataWidgetMapper::setModel(QAbstractItemModel *model)

Définit le modèle actuel à model. Si un autre modèle a été défini, toutes les correspondances avec l'ancien modèle sont effacées.

Voir aussi model().

void QDataWidgetMapper::setRootIndex(const QModelIndex &index)

Définit l'élément racine à index. Ceci peut être utilisé pour afficher une branche d'un arbre. Passer un index de modèle invalide pour afficher la branche la plus haute.

Voir aussi rootIndex().

[slot] bool QDataWidgetMapper::submit()

Soumet toutes les modifications apportées par les widgets mappés au modèle.

Pour chaque section mappée, le délégué de l'élément lit la valeur actuelle du widget et la définit dans le modèle. Enfin, la méthode submit() du modèle est invoquée.

Elle renvoie true si toutes les valeurs ont été soumises, sinon elle renvoie false.

Remarque : pour les modèles de base de données, QSqlQueryModel::lastError() peut être utilisé pour récupérer la dernière erreur.

Voir également revert() et setSubmitPolicy().

[slot] void QDataWidgetMapper::toFirst()

Remplit les widgets avec les données de la première ligne du modèle si l'orientation est horizontale (par défaut), sinon avec les données de la première colonne.

Cela équivaut à appeler setCurrentIndex(0).

Voir également toLast() et setCurrentIndex().

[slot] void QDataWidgetMapper::toLast()

Remplit les widgets avec les données de la dernière ligne du modèle si l'orientation est horizontale (par défaut), sinon avec les données de la dernière colonne.

Appelle setCurrentIndex() en interne.

Voir aussi toFirst() et setCurrentIndex().

[slot] void QDataWidgetMapper::toNext()

Remplit les widgets avec les données de la ligne suivante du modèle si l'orientation est horizontale (par défaut), sinon avec les données de la colonne suivante.

Appelle setCurrentIndex() en interne. Ne fait rien s'il n'y a pas de ligne suivante dans le modèle.

Voir aussi toPrevious() et setCurrentIndex().

[slot] void QDataWidgetMapper::toPrevious()

Remplit les widgets avec les données de la ligne précédente du modèle si l'orientation est horizontale (par défaut), sinon avec les données de la colonne précédente.

Appelle setCurrentIndex() en interne. Ne fait rien s'il n'y a pas de ligne précédente dans le modèle.

Voir aussi toNext() et setCurrentIndex().

© 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.