Spec-Zone.ru › Qt 5.11

Класс 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 = 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
  • 34 открытые функции унаследованы от 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

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

  • 1 открытая переменная унаследована от QObject
  • 10 статические открытые члены унаследованы от QObject
  • 9 защищенные функции унаследованы от QObject
  • 2 защищенные переменные унаследованы от 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

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

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

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

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

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

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

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

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

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

QDataWidgetMapper::QDataWidgetMapper(QObject *parent = nullptr)

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

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

[virtual] 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() модели выбора выбора другого представления.

Следующий пример показывает, как обновить все виджеты новыми данными всякий раз, когда изменяется выбор 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/archives/qt-5.11/qdatawidgetmapper.html

Spec-Zone.ru

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