QDataWidgetMapper Class
La classe `QDataWidgetMapper` permet d'établir une correspondance entre une partie d'un modèle de données et des widgets. En savoir plus...
| En-tête : | #include <QDataWidgetMapper> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite de : | QObject |
Types publics
| enum | SubmitPolicy { AutoSubmit, ManualSubmit } |
Propriétés
- currentIndex : int
- orientation : Qt::Orientation
- submitPolicy : SubmitPolicy
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 permet de créer des widgets liés aux données en les mappant à des sections d’un modèle d’éléments. Une section correspond à une colonne du modèle si l’orientation est horizontale (par défaut), sinon à une ligne.
À chaque changement d'index courant, chaque widget est mis à jour avec les données du modèle via la propriété spécifiée lors de son mappage. Si l'utilisateur modifie le contenu d'un widget, les modifications sont lues à l'aide de cette même propriété et réécrites dans le modèle. Par défaut, la propriété « user property » de chaque widget est utilisée 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 à la place de la propriété « » par défaut.
Il est possible de définir un délégué d’élément pour prendre en charge des widgets personnalisés. Par défaut, une propriété « QStyledItemDelegate » est utilisée pour synchroniser le modèle avec les widgets.
Supposons que nous ayons un modèle d’élément nommé model avec le contenu suivant :
| 1 | Qt Norvège | Oslo |
| 2 | Qt Australie | Brisbane |
| 3 | Qt États-Unis | Palo Alto |
| 4 | Qt Chine | Pékin |
| 5 | Qt Allemagne | Berlin |
Le code suivant mappera les colonnes du modèle à des widgets nommé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 comme index racine : les enfants de cet élément seront mappés aux widgets correspondants dans l’interface utilisateur.
QDataWidgetMapper prend en charge deux politiques de validation : « AutoSubmit » et « ManualSubmit ». « AutoSubmit » met à jour le modèle dès que le widget actif perd le focus, tandis que « ManualSubmit » ne met à jour le modèle que si la fonction « submit() » est appelée. « ManualSubmit » est utile lors de l’affichage d’une boîte de dialogue permettant à l’utilisateur d’annuler toutes les modifications. De plus, les autres vues affichant le modèle ne seront pas mises à jour tant que l’utilisateur n’aura pas terminé toutes ses modifications et validé.
Notez que `QDataWidgetMapper` assure le suivi 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 prises en charge par un QDataWidgetMapper.
| Constante | Valeur | Description |
|---|---|---|
QDataWidgetMapper::AutoSubmit | 0 | Chaque fois qu’un widget perd le focus, sa valeur actuelle est enregistrée dans le modèle d’élément. |
QDataWidgetMapper::ManualSubmit | 1 | Le modèle n’est pas mis à jour tant que la méthode ` submit()` n’a pas été appelée. |
Documentation de la propriété
currentIndex : int
Cette propriété contient la ligne ou la colonne actuelle
Les widgets sont renseignés avec les données de la ligne située à l'adresse index si l'orientation est horizontale (par défaut), sinon avec celles de la colonne située à l'adresse index.
Fonctions d’accès :
| int | currentIndex() const |
| virtual void | setCurrentIndex(int index) |
Signal de notification :
| void | currentIndexChanged(int index) |
Voir également setCurrentModelIndex(), toFirst(), toNext(), toPrevious() et toLast().
orientation : Qt::Orientation
Cette propriété définit 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 renseigné avec les données du modèle provenant de la colonne associée et de la ligne pointée par la fonction ` currentIndex()`.
Utilisez « Qt::Horizontal » pour les données tabulaires qui se présentent comme suit :
| 1 | Qt Norvège | Oslo |
| 2 | Qt Australie | Brisbane |
| 3 | Qt États-Unis | Silicon Valley |
| 4 | Qt Chine | Pékin |
| 5 | Qt Allemagne | Berlin |
Si l’orientation est définie sur « Qt::Vertical », un widget est associé à une ligne. L’appel de la méthode ` setCurrentIndex()` modifie la colonne actuelle. Le widget sera renseigné avec les données du modèle provenant de la ligne qui lui est associée et de la colonne indiquée par la méthode ` currentIndex()`.
Utilisez ` Qt::Vertical ` pour les données tabulaires qui se présentent comme suit :
| 1 | 2 | 3 | 4 | 5 |
| Qt Norvège | Qt Australie | Qt États-Unis | Qt Chine | Qt Allemagne |
| Oslo | Brisbane | Silicon Valley | Pékin | Berlin |
La modification de l’orientation efface tous les mappages existants.
Fonctions d'accès :
| Qt::Orientation | orientation() const |
| void | setOrientation(Qt::Orientation aOrientation) |
submitPolicy : SubmitPolicy
Cette propriété contient la politique de validation actuelle
La modification de la politique de soumission actuelle réinitialisera 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)
Crée un nouvel objet `QDataWidgetMapper` dont l'objet parent est ` parent`. Par défaut, l'orientation est horizontale et la politique de validation 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 une « widget » et une « section » du modèle. L’« section » est une colonne du modèle si l’orientation est horizontale (par défaut), sinon c’est une ligne.
Dans l’exemple suivant, nous partons du principe 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 mise en correspondance avec l’ QLineEdit nameLineEdit , et la seconde avec l’ QSpinBox ageSpinBox :
QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(myModel);
mapper->addMapping(nameLineEdit, 0);
mapper->addMapping(ageSpinBox, 1);Remarques :
- Si l’ widget est déjà associé à une section, l’ancien mappage sera remplacé par le nouveau.
- Seuls les mappages biunivoques entre sections et widgets sont autorisés. Il n’est pas possible de mapper une seule section à plusieurs widgets, ni de mapper un seul widget à plusieurs sections.
Voir également removeMapping(), mappedSection() et clearMapping().
void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)
Cette méthode est pratiquement identique à addMapping(), mais offre en plus la possibilité de spécifier la propriété à utiliser en indiquant propertyName.
Voir également addMapping().
void QDataWidgetMapper::clearMapping()
Efface tous les mappages.
Voir également addMapping() et removeMapping().
[signal] void QDataWidgetMapper::currentIndexChanged(int index)
Ce signal est émis une fois que l'index actuel a changé et que tous les widgets ont été mis à jour avec les nouvelles données. index correspond au nouvel index actuel.
Remarque : signalde notification pour la propriété currentIndex.
Voir également 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 du mappage des données vers l'widget donné.
Voir également mappedSection(), addMapping() et removeMapping().
int QDataWidgetMapper::mappedSection(QWidget *widget) const
Renvoie la section à laquelle le widget « widget » est associé, ou -1 si le widget n'est pas associé.
Voir aussi ` addMapping()` et ` removeMapping()`.
QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const
Renvoie le widget associé à la section section, ou 0 si aucun widget n'est associé à cette section.
Voir également addMapping() et removeMapping().
QAbstractItemModel *QDataWidgetMapper::model() const
Renvoie le modèle actuel.
Voir aussi setModel().
void QDataWidgetMapper::removeMapping(QWidget *widget)
Supprime le mappage associé à l'widget.
Voir également addMapping() et clearMapping().
[slot] void QDataWidgetMapper::revert()
Remplit tous les widgets avec les données actuelles du modèle. Toutes les modifications non enregistrées seront perdues.
Voir également submit() et setSubmitPolicy().
QModelIndex QDataWidgetMapper::rootIndex() const
Renvoie l'index racine actuel.
Voir également ` setRootIndex()`.
[slot] void QDataWidgetMapper::setCurrentModelIndex(const QModelIndex &index)
Définit l'index courant sur la ligne de l'index si l'orientation est horizontale (par défaut), sinon sur la colonne de l'index.
Appelle en interne la méthode ` setCurrentIndex()`. Ce slot de commodité peut être connecté au signal ` currentRowChanged()` ou ` currentColumnChanged()` de l'selection model d'une autre vue.
L’exemple suivant illustre comment mettre à jour tous les widgets avec de nouvelles données chaque fois que la sélection d’un « QTableView » nommé « myTableView » change :
QDataWidgetMapper *mapper = new QDataWidgetMapper;
connect(myTableView->selectionModel(), &QItemSelectionModel::currentRowChanged,
mapper, &QDataWidgetMapper::setCurrentModelIndex);Voir également currentIndex().
void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)
Définit le délégué de l'élément sur delegate. Ce délégué sera utilisé pour écrire les données du modèle dans le widget et celles du widget dans le modèle, à l'aide des méthodes QAbstractItemDelegate::setEditorData() et QAbstractItemDelegate::setModelData().
Tout délégué existant sera retiré, mais non supprimé. QDataWidgetMapper ne prend pas possession de delegate.
Le délégué décide également quand appliquer les données et quand changer d’éditeur, à l’aide de QAbstractItemDelegate::commitData() et QAbstractItemDelegate::closeEditor().
Avertissement : vous ne devez pas partager la même instance d’un délégué entre des mappeurs de widgets ou des vues. Cela peut entraîner un comportement d’édition incorrect ou contre-intuitif, car 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 sur model. Si un autre modèle avait été défini, tous les mappages vers cet ancien modèle sont effacés.
Voir également model().
void QDataWidgetMapper::setRootIndex(const QModelIndex &index)
Définit l'élément racine sur index. Cette fonction peut être utilisée pour afficher une branche d'une arborescence. Passez un index de modèle non valide pour afficher la branche la plus haute.
Voir également rootIndex().
[slot] bool QDataWidgetMapper::submit()
Envoie toutes les modifications provenant des widgets mappés vers le modèle.
Pour chaque section mappée, le délégué d'élément lit la valeur actuelle du widget et l'enregistre dans le modèle. Enfin, la méthode submit() du modèle est appelée.
Renvoie ` true ` si toutes les valeurs ont été soumises, sinon `false`.
Remarque : pour les modèles de base de données, la méthode QSqlQueryModel::lastError() peut être utilisée 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 celles de la première colonne.
Cela revient à 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 celles de la dernière colonne.
Appelle en interne la fonction setCurrentIndex().
Voir également 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 celles de la colonne suivante.
Appelle en interne la fonction setCurrentIndex(). Ne fait rien s'il n'y a pas de ligne suivante dans le modèle.
Voir également 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 celles de la colonne précédente.
Appelle en interne la fonction setCurrentIndex(). Ne fait rien s'il n'y a pas de ligne précédente dans le modèle.
Voir également 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.