Spec-Zone.ru › Qt 5.9

Класс QDataWidgetMapper

Класс QDataWidgetMapper обеспечивает сопоставление части модели данных с виджетами. Подробнее...

Заголовок: #include <QDataWidgetMapper>
qmake: QT += widgets
С тех пор: Qt 4.2
Наследует: QObject
  • Список всех членов, включая унаследованные

Открытые типы

Перечисление SubmitPolicy { AutoSubmit, ManualSubmit }

Свойства

  • currentIndex : int
  • orientation : Qt::Orientation
  • submitPolicy : SubmitPolicy
  • 1 свойство унаследовано от QObject

Открытые функции

QDataWidgetMapper(QObject *parent = Q_NULLPTR)
~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(SubmitPolicy policy)
SubmitPolicy submitPolicy() const
  • 32 открытые функции унаследованы от QObject

Открытые слоты

void revert()
virtual void setCurrentIndex(int index)
void setCurrentModelIndex(const QModelIndex &index)
bool submit()
void toFirst()
void toLast()
void toNext()
void toPrevious()
  • 1 открытый слот унаследован от QObject

Сигналы

void currentIndexChanged(int index)
  • 2 сигнала унаследованы от QObject

Дополнительные унаследованные члены

  • 11 статических открытых членов унаследованы от QObject
  • 9 защищённых функций унаследованы от QObject

Подробное описание

Класс QDataWidgetMapper обеспечивает сопоставление части модели данных с виджетами.

QDataWidgetMapper может использоваться для создания виджетов, реагирующих на данные, посредством сопоставления их с разделами модели элементов. Раздел представляет собой столбец модели, если ориентация горизонтальная (по умолчанию), иначе — строку.

Каждый раз, когда изменяется текущий индекс, каждый виджет обновляется данными из модели через свойство, указанное при его сопоставлении. Если пользователь изменяет содержимое виджета, изменения считываются с помощью того же свойства и записываются обратно в модель. По умолчанию используется пользовательское свойство каждого виджета для передачи данных между моделью и виджетом. Начиная с Qt 4.3, дополнительная функция addMapping() позволяет использовать вместо свойства по умолчанию свойство с именем.

Можно установить делегат элементов для поддержки пользовательских виджетов. По умолчанию используется QItemDelegate для синхронизации модели с виджетами.

Предположим, что у нас есть модель элементов под названием model со следующим содержимым:

1 Qt Norway Oslo
2 Qt Australia Brisbane
3 Qt USA Palo Alto
4 Qt China Beijing
5 Qt Germany Berlin

Следующий код сопоставит столбцы модели с виджетами под названием mySpinBox, myLineEdit и myCountryChooser:

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

После вызова toFirst(), mySpinBox отображает значение 1, myLineEdit отображает Qt Norway, а myCountryChooser отображает Oslo. Для навигации по модели и обновления виджетов содержимым из модели можно использовать функции навигации toFirst(), toNext(), toPrevious(), toLast() и setCurrentIndex().

Функция setRootIndex() позволяет указать определённый элемент в модели как корневой индекс — дочерние элементы этого элемента будут сопоставлены с соответствующими виджетами в пользовательском интерфейсе.

QDataWidgetMapper поддерживает две политики отправки, AutoSubmit и ManualSubmit. AutoSubmit обновит модель, как только текущий виджет потеряет фокус, ManualSubmit не обновит модель, пока не будет вызван submit(). ManualSubmit полезна при отображении диалогового окна, позволяющего пользователю отменить все изменения. Также и другие представления, отображающие модель, не обновятся, пока пользователь не завершит все изменения и не отправит их.

Обратите внимание, что QDataWidgetMapper отслеживает внешние изменения. Если содержимое модели обновляется в другом модуле приложения, виджеты также обновляются.

См. также QAbstractItemModel и QAbstractItemDelegate.

Документация типов членов

enum QDataWidgetMapper::SubmitPolicy

Этот перечисление описывает возможные политики отправки, которые поддерживает QDataWidgetMapper.

Постоянная Значение Описание
QDataWidgetMapper::AutoSubmit 0 При каждом потере фокуса виджетом, текущее значение виджета устанавливается в модель элементов.
QDataWidgetMapper::ManualSubmit 1 Модель не обновляется до тех пор, пока не будет вызван submit().

Документация свойств

currentIndex : int

Это свойство содержит текущую строку или столбец.

Виджеты заполняются данными из строки с индексом, если ориентация горизонтальная (по умолчанию), иначе данными из столбца с индексом.

Функции доступа:

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

Сигнал уведомления:

void currentIndexChanged(int index)

См. также setCurrentModelIndex(), toFirst(), toNext(), toPrevious() и toLast().

orientation : Qt::Orientation

Это свойство содержит ориентацию модели.

Если ориентация Qt::Horizontal (по умолчанию), виджет сопоставляется со столбцом модели данных. Виджет будет заполнен данными модели из сопоставленного столбца и строки, на которую указывает currentIndex().

Используйте Qt::Horizontal для табличных данных, которые выглядят так:

1 Qt Norway Oslo
2 Qt Australia Brisbane
3 Qt USA Silicon Valley
4 Qt China Beijing
5 Qt Germany Berlin

Если ориентация установлена в Qt::Vertical, виджет сопоставляется со строкой. Вызов setCurrentIndex() изменит текущий столбец. Виджет будет заполнен данными модели из сопоставленной строки и столбца, на который указывает currentIndex().

Используйте Qt::Vertical для табличных данных, которые выглядят так:

1 2 3 4 5
Qt Norway Qt Australia Qt USA Qt China Qt Germany
Oslo Brisbane Silicon Valley Beijing Berlin

Изменение ориентации очищает все существующие сопоставления.

Функции доступа:

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

submitPolicy : SubmitPolicy

Это свойство содержит текущую политику отправки.

Изменение текущей политики отправки вернёт все виджеты к текущим данным из модели.

Функции доступа:

SubmitPolicy submitPolicy() const
void setSubmitPolicy(SubmitPolicy policy)

Документация функций членов

QDataWidgetMapper::QDataWidgetMapper(QObject *parent = Q_NULLPTR)

Создаёт новый QDataWidgetMapper с родительским объектом parent. По умолчанию ориентация горизонтальная, а политика отправки — AutoSubmit.

См. также setOrientation() и setSubmitPolicy().

QDataWidgetMapper::~QDataWidgetMapper()

Уничтожает объект.

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

Добавляет сопоставление между widget и section из модели. section — это столбец в модели, если ориентация горизонтальная (по умолчанию), иначе — строка.

Для следующего примера предположим модель myModel, которая имеет два столбца: первый содержит имена людей в группе, а второй — их возраст. Первый столбец сопоставлен с QLineEdit nameLineEdit, а второй — с QSpinBox ageSpinBox:

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

Примечания:

  • Если widget уже сопоставлен с секцией, старое сопоставление будет заменено новым.
  • Разрешены только взаимно однозначные сопоставления между секциями и виджетами. Невозможно сопоставить одну секцию с несколькими виджетами или один виджет с несколькими секциями.

См. также removeMapping(), mappedSection() и clearMapping().

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

В сущности, то же, что и addMapping(), но добавляет возможность указать свойство для использования, указав propertyName.

Эта функция была добавлена в Qt 4.3.

См. также addMapping().

void QDataWidgetMapper::clearMapping()

Очищает все сопоставления.

См. также addMapping() и removeMapping().

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

Этот сигнал генерируется после изменения текущего индекса и заполнения всех виджетов новыми данными. index — новый текущий индекс.

Примечание: Сигнал уведомления для свойства currentIndex.

См. также currentIndex() и setCurrentIndex().

QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const

Возвращает текущий делегат элемента.

См. также setItemDelegate().

QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const

Возвращает имя свойства, используемого при сопоставлении данных с заданным widget.

Эта функция была добавлена в Qt 4.3.

См. также mappedSection(), addMapping() и removeMapping().

int QDataWidgetMapper::mappedSection(QWidget *widget) const

Возвращает секцию, к которой сопоставлен widget, или -1, если виджет не сопоставлен.

См. также addMapping() и removeMapping().

QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const

Возвращает виджет, сопоставленный с section, или 0, если виджет не сопоставлен с этой секцией.

См. также addMapping() и removeMapping().

QAbstractItemModel *QDataWidgetMapper::model() const

Возвращает текущую модель.

См. также setModel().

void QDataWidgetMapper::removeMapping(QWidget *widget)

Удаляет сопоставление для данного widget.

См. также addMapping() и clearMapping().

[slot] void QDataWidgetMapper::revert()

Перезаполняет все виджеты текущими данными модели. Все несохранённые изменения будут утеряны.

См. также submit() и setSubmitPolicy().

QModelIndex QDataWidgetMapper::rootIndex() const

Возвращает текущий корневой индекс.

См. также setRootIndex().

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

Устанавливает текущий индекс в строку index, если ориентация горизонтальная (по умолчанию), иначе в столбец index.

Вызывает setCurrentIndex() внутри. Этот удобный слот может быть подключен к сигналу currentRowChanged() или currentColumnChanged() модели выбора selection model другого виджета.

Следующий пример демонстрирует, как обновить все виджеты с новыми данными всякий раз, когда меняется выбор в QTableView с именем myTableView:

QDataWidgetMapper *mapper = new QDataWidgetMapper();
connect(myTableView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
        mapper, SLOT(setCurrentModelIndex(QModelIndex)));

См. также currentIndex().

void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)

Устанавливает делегат элементов в delegate. Делегат будет использоваться для записи данных из модели в виджет и из виджета в модель, используя QAbstractItemDelegate::setEditorData() и QAbstractItemDelegate::setModelData().

Делегат также определяет, когда применять данные и когда менять редактор, используя QAbstractItemDelegate::commitData() и QAbstractItemDelegate::closeEditor().

Предупреждение: Не следует использовать один и тот же экземпляр делегата между мапперами виджетов или представлениями. Это может привести к некорректному или неинтуитивному поведению редактирования, поскольку каждое представление, подключенное к данному делегату, может получить сигнал closeEditor() и попытаться получить доступ, изменить или закрыть редактор, который уже был закрыт.

См. также itemDelegate().

void QDataWidgetMapper::setModel(QAbstractItemModel *model)

Устанавливает текущую модель в model. Если была установлена другая модель, все сопоставления с этой старой моделью очищаются.

См. также model().

void QDataWidgetMapper::setRootIndex(const QModelIndex &index)

Устанавливает корневой элемент в index. Это можно использовать для отображения ветви дерева. Передайте недействительный индекс модели, чтобы отобразить самую верхнюю ветвь.

См. также rootIndex().

[slot] bool QDataWidgetMapper::submit()

Отправляет все изменения из сопоставленных виджетов в модель.

Для каждого сопоставленного раздела делегат элемента считывает текущее значение из виджета и устанавливает его в модели. В конце вызывается метод submit() модели.

Возвращает true если все значения были отправлены, в противном случае false.

Примечание: для баз данных, QSqlQueryModel::lastError() может использоваться для получения последней ошибки.

См. также revert() и setSubmitPolicy().

[slot] void QDataWidgetMapper::toFirst()

Заполняет виджеты данными из первой строки модели, если ориентация горизонтальная (по умолчанию), иначе данными из первого столбца.

Эквивалентно вызову setCurrentIndex(0).

См. также toLast() и setCurrentIndex().

[slot] void QDataWidgetMapper::toLast()

Заполняет виджеты данными из последней строки модели, если ориентация горизонтальная (по умолчанию), иначе данными из последнего столбца.

Вызывает setCurrentIndex() внутри.

См. также toFirst() и setCurrentIndex().

[slot] void QDataWidgetMapper::toNext()

Заполняет виджеты данными из следующей строки модели, если ориентация горизонтальная (по умолчанию), иначе данными из следующего столбца.

Вызывает setCurrentIndex() внутри. Ничего не делает, если следующей строки в модели нет.

См. также toPrevious() и setCurrentIndex().

[slot] void QDataWidgetMapper::toPrevious()

Заполняет виджеты данными из предыдущей строки модели, если ориентация горизонтальная (по умолчанию), иначе данными из предыдущего столбца.

Вызывает setCurrentIndex() внутри. Ничего не делает, если предыдущей строки в модели нет.

См. также toNext() и setCurrentIndex().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qdatawidgetmapper.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API