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
- currentIndex : int
- orientation : Qt::Orientation
- submitPolicy : SubmitPolicy
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:
| 1 | Qt Noruega | Oslo |
| 2 | Qt Australia | Brisbane |
| 3 | Qt EE.UU. | Palo Alto |
| 4 | Qt China | Pekín |
| 5 | Qt Alemania | Berlí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.
| Constante | Valor | Descripción |
|---|---|---|
QDataWidgetMapper::AutoSubmit | 0 | Siempre que un widget pierde el foco, el valor actual del widget se establece en el modelo del elemento. |
QDataWidgetMapper::ManualSubmit | 1 | El 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:
| 1 | Qt Noruega | Oslo |
| 2 | Qt Australia | Brisbane |
| 3 | Qt EE.UU. | Silicon Valley |
| 4 | Qt China | Pekín |
| 5 | Qt Alemania | Berlí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:
| 1 | 2 | 3 | 4 | 5 |
| Qt Noruega | Qt Australia | Qt EE.UU. | Qt China | Qt Alemania |
| Oslo | Brisbane | Silicon Valley | Pekín | Berlí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.