En esta página

QDataWidgetMapper Class

La clase QDataWidgetMapper proporciona un mapeo entre una sección de un modelo de datos y los widgets. Más...

Cabecera: #include <QDataWidgetMapper>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QObject

Tipos públicos

enum SubmitPolicy { AutoSubmit, ManualSubmit }

Propiedades

Funciones públicas

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

Ranuras públicas

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

Señales

void currentIndexChanged(int index)

Descripción Detallada

QDataWidgetMapper puede ser usado para crear widgets data-aware mapeandolos a secciones de un modelo de items. Una sección es una columna de un modelo si la orientación es horizontal (por defecto), en caso contrario es una fila.

Cada vez que cambia el índice actual, cada widget se actualiza con los datos del modelo a través de la propiedad especificada cuando se realizó su asignación. Si el usuario edita el contenido de un widget, los cambios se leen utilizando la misma propiedad y se escriben de nuevo en el modelo. Por defecto, cada widget utiliza user property para transferir datos entre el modelo y el widget. Desde Qt 4.3, una función adicional addMapping() permite utilizar una propiedad con nombre en lugar de la propiedad de usuario por defecto.

Es posible establecer un delegado de elemento para soportar widgets personalizados. Por defecto, se utiliza un QStyledItemDelegate para sincronizar el modelo con los widgets.

Supongamos que tenemos un modelo de ítem llamado model con el siguiente contenido:

1Qt NoruegaOslo
2Qt AustraliaBrisbane
3Qt EE.UU.Palo Alto
4Qt ChinaPekín
5Qt AlemaniaBerlín

El siguiente código asignará las columnas del modelo a widgets llamados mySpinBox, myLineEdit y myCountryChooser:

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

Tras la llamada a toFirst(), mySpinBox muestra el valor 1, myLineEdit muestra Qt Norway y myCountryChooser muestra Oslo. Las funciones de navegación toFirst(), toNext(), toPrevious(), toLast() y setCurrentIndex() pueden utilizarse para navegar por el modelo y actualizar los widgets con contenidos del modelo.

La función setRootIndex() permite especificar un elemento concreto de un modelo como índice raíz - los hijos de este elemento se asignarán a los widgets pertinentes de la interfaz de usuario.

QDataWidgetMapper soporta dos políticas de envío, AutoSubmit y ManualSubmit. AutoSubmit actualizará el modelo tan pronto como el widget actual pierda el foco, ManualSubmit no actualizará el modelo a menos que se llame a submit(). ManualSubmit es útil cuando se muestra un diálogo que permite al usuario cancelar todas las modificaciones. Además, otras vistas que muestren el modelo no se actualizarán hasta que el usuario termine todas sus modificaciones y lo envíe.

Ten en cuenta que QDataWidgetMapper realiza un seguimiento de las modificaciones externas. Si los contenidos del modelo se actualizan en otro módulo de la aplicación, los widgets se actualizan también.

Ver también QAbstractItemModel y QAbstractItemDelegate.

Documentación de tipos de miembros

enum QDataWidgetMapper::SubmitPolicy

Este enum describe las posibles políticas de envío que admite QDataWidgetMapper.

ConstanteValorDescripción
QDataWidgetMapper::AutoSubmit0Siempre que un widget pierde el foco, el valor actual del widget se establece en el modelo del elemento.
QDataWidgetMapper::ManualSubmit1El modelo no se actualiza hasta que se llama a submit().

Documentación de propiedades

currentIndex : int

Esta propiedad contiene la fila o columna actual

Los widgets se rellenan con los datos de la fila en index si la orientación es horizontal (por defecto), en caso contrario con los datos de la columna en index.

Funciones de acceso:

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

Señal del notificador:

void currentIndexChanged(int index)

Véase también setCurrentModelIndex(), toFirst(), toNext(), toPrevious(), y toLast().

orientation : Qt::Orientation

Esta propiedad contiene la orientación del modelo

Si la orientación es Qt::Horizontal (por defecto), un widget se asigna a una columna de un modelo de datos. El widget se rellenará con los datos del modelo de su columna asignada y la fila a la que apunta currentIndex().

Utilice Qt::Horizontal para datos tabulares con este aspecto:

1Qt NoruegaOslo
2Qt AustraliaBrisbane
3Qt EE.UU.Silicon Valley
4Qt ChinaPekín
5Qt AlemaniaBerlín

Si la orientación se establece en Qt::Vertical, un widget se asigna a una fila. Al llamar a setCurrentIndex() se cambiará la columna actual. El widget se rellenará con los datos del modelo de su fila mapeada y la columna a la que apunta currentIndex().

Utilice Qt::Vertical para datos tabulares con este aspecto:

12345
Qt NoruegaQt AustraliaQt EE.UU.Qt ChinaQt Alemania
OsloBrisbaneSilicon ValleyPekínBerlín

El cambio de orientación borra todas las asignaciones existentes.

Funciones de acceso:

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

submitPolicy : SubmitPolicy

Esta propiedad contiene la política de envío actual

Cambiar la política de envío actual revertirá todos los widgets a los datos actuales del modelo.

Funciones de acceso:

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

Documentación de funciones miembro

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

Construye un nuevo QDataWidgetMapper con el objeto padre parent. Por defecto, la orientación es horizontal y la política de envío es AutoSubmit.

Ver también setOrientation() y setSubmitPolicy().

[virtual noexcept] QDataWidgetMapper::~QDataWidgetMapper()

Destruye el objeto.

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

Añade una correspondencia entre un widget y un section del modelo. El section es una columna del modelo si la orientación es horizontal (por defecto), en caso contrario es una fila.

Para el siguiente ejemplo, suponemos un modelo myModel que tiene dos columnas: la primera contiene los nombres de las personas de un grupo, y la segunda, sus edades. La primera columna se asigna a QLineEdit nameLineEdit , y la segunda a QSpinBox ageSpinBox :

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

Notas:

  • Si widget ya está asignada a una sección, la antigua asignación será sustituida por la nueva.
  • Sólo se permiten asignaciones uno a uno entre secciones y widgets. No es posible asignar una sección a varios widgets, ni asignar un widget a varias secciones.

Véase también removeMapping(), mappedSection() y clearMapping().

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

Esencialmente lo mismo que addMapping(), pero añade la posibilidad de especificar la propiedad a utilizar especificando propertyName.

Véase también addMapping().

void QDataWidgetMapper::clearMapping()

Borra todas las asignaciones.

Véase también addMapping() y removeMapping().

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

Esta señal se emite después de que el índice actual haya cambiado y todos los widgets se hayan rellenado con nuevos datos. index es el nuevo índice actual.

Nota: Señal notificadora para la propiedad currentIndex.

Véase también currentIndex() y setCurrentIndex().

QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const

Devuelve el delegado de elemento actual.

Véase también setItemDelegate().

QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const

Devuelve el nombre de la propiedad que se utiliza al asignar datos a la dirección widget.

Véase también mappedSection(), addMapping() y removeMapping().

int QDataWidgetMapper::mappedSection(QWidget *widget) const

Devuelve la sección a la que está asignado widget o -1 si el widget no está asignado.

Véase también addMapping() y removeMapping().

QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const

Devuelve el widget que está mapeado en section, o 0 si no hay ningún widget mapeado en esa sección.

Véase también addMapping() y removeMapping().

QAbstractItemModel *QDataWidgetMapper::model() const

Devuelve el modelo actual.

Véase también setModel().

void QDataWidgetMapper::removeMapping(QWidget *widget)

Elimina la asignación de la dirección widget.

Véase también addMapping() y clearMapping().

[slot] void QDataWidgetMapper::revert()

Rellena todos los widgets con los datos actuales del modelo. Todos los cambios no enviados se perderán.

Véase también submit() y setSubmitPolicy().

QModelIndex QDataWidgetMapper::rootIndex() const

Devuelve el índice raíz actual.

Véase también setRootIndex().

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

Establece el índice actual en la fila de index si la orientación es horizontal (por defecto), en caso contrario en la columna de index.

Llama internamente a setCurrentIndex(). Esta ranura de conveniencia puede conectarse a la señal currentRowChanged() o currentColumnChanged() de otra vista selection model.

El siguiente ejemplo ilustra cómo actualizar todos los widgets con nuevos datos cada vez que cambia la selección de un QTableView llamado myTableView:

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

Véase también currentIndex().

void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)

Establece el delegado de elemento en delegate. El delegado se utilizará para escribir datos del modelo en el widget y del widget en el modelo, utilizando QAbstractItemDelegate::setEditorData() y QAbstractItemDelegate::setModelData().

Cualquier delegado existente será eliminado, pero no borrado. QDataWidgetMapper no se apropia de delegate.

El delegado también decide cuándo aplicar datos y cuándo cambiar el editor, utilizando QAbstractItemDelegate::commitData() y QAbstractItemDelegate::closeEditor().

Advertencia: No debes compartir la misma instancia de un delegado entre mapeadores de widgets o vistas. Hacerlo puede causar un comportamiento de edición incorrecto o poco intuitivo, ya que cada vista conectada a un delegado dado puede recibir la señal closeEditor(), e intentar acceder, modificar o cerrar un editor que ya ha sido cerrado.

Véase también itemDelegate().

void QDataWidgetMapper::setModel(QAbstractItemModel *model)

Establece el modelo actual en model. Si se estableció otro modelo, se borran todas las asignaciones a ese modelo antiguo.

Véase también model().

void QDataWidgetMapper::setRootIndex(const QModelIndex &index)

Establece el elemento raíz en index. Esto se puede utilizar para mostrar una rama de un árbol. Pase un índice de modelo no válido para mostrar la rama superior.

Véase también rootIndex().

[slot] bool QDataWidgetMapper::submit()

Envía todos los cambios de los widgets mapeados al modelo.

Para cada sección asignada, el delegado de elementos lee el valor actual del widget y lo establece en el modelo. Por último, se invoca el método submit() del modelo.

Devuelve true si se han enviado todos los valores, en caso contrario false.

Nota: Para los modelos de base de datos, QSqlQueryModel::lastError() se puede utilizar para recuperar el último error.

Véase también revert() y setSubmitPolicy().

[slot] void QDataWidgetMapper::toFirst()

Rellena los widgets con los datos de la primera fila del modelo si la orientación es horizontal (por defecto); en caso contrario, con los datos de la primera columna.

Esto equivale a llamar a setCurrentIndex(0).

Véase también toLast() y setCurrentIndex().

[slot] void QDataWidgetMapper::toLast()

Rellena los widgets con los datos de la última fila del modelo si la orientación es horizontal (por defecto), en caso contrario con los datos de la última columna.

Llama internamente a setCurrentIndex().

Véase también toFirst() y setCurrentIndex().

[slot] void QDataWidgetMapper::toNext()

Rellena los widgets con datos de la siguiente fila del modelo si la orientación es horizontal (por defecto), en caso contrario con datos de la siguiente columna.

Llama internamente a setCurrentIndex(). No hace nada si no hay siguiente fila en el modelo.

Véase también toPrevious() y setCurrentIndex().

[slot] void QDataWidgetMapper::toPrevious()

Rellena los widgets con los datos de la fila anterior del modelo si la orientación es horizontal (por defecto), en caso contrario con los datos de la columna anterior.

Llama internamente a setCurrentIndex(). No hace nada si no hay fila anterior en el modelo.

Véase también toNext() y 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.