Qt эквивалент привязки данных .NET? - PullRequest
21 голосов
/ 09 ноября 2009

Есть ли эквивалент привязки данных .NET в Qt?

Я хочу заполнить некоторые поля со списком и другие виджеты QStrings, которые ссылаются на конкретные объекты в моей базе данных. Однако было бы лучше, если бы я мог связать данные с этими строками вместо того, чтобы либо снова запрашивать базу данных на основе нового выбора в выпадающем списке, либо на какой-либо другой схеме, основанной на построении моего собственного индекса объектов, которые будут искать с помощью QStrings.

Лучшее, что я придумал, - это извлечь эти объекты из QString и вставить их в виджеты таким образом, но я еще не попробовал. Я не уверен, будет ли это работать так, как я хочу, и это похоже на неприятный хак.

Если привязка данных отсутствует, что вы предлагаете?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 09 ноября 2009

Один из способов - использовать Qt Model / View Classes (с базой в QAbstractItemModel), но им нужно, чтобы ваш виджет наследовал QAbstractItemView (это такие виджеты, как QTableView и т. Д.).
Если вы хотите сопоставить модель Qt с набором виджетов, которые не имеют ничего общего с QAbstractItemView, вы можете использовать QDataWidgetMapper, который отображает отдельный виджет на индексы Qt Model / View. Но в любом случае, как сказал Аарон Дигулла, вы должны написать какой-нибудь код котельной плиты ...

7 голосов
/ 20 февраля 2015

В качестве пользователя небрежного, упомянутого в комментарии, вы можете использовать класс QDataWidgetMapper. Это довольно простой способ привязки произвольных виджетов к данным, которые хранятся в QAbstractItemModel.

Пример на связанной странице показывает в нескольких строках кода, как вы можете связать свою модель данных с часто используемыми виджетами ввода:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();
3 голосов
/ 09 ноября 2009

Ну, специально для выпадающего списка, вы можете установить модель. Для объектов QObjects в целом вы можете использовать сигнал уведомления для свойств для подключения или других сигналов, не связанных с собственностью. Я думаю, что есть другой способ сделать это, но я не могу вспомнить.

...