Потрясно! Жалко уже написал велосипед. Если будет время, перепишу на ваш способ. Вообще, стоило догадаться, что идиома модель-представления в qt предусмотрена и для форм. Спасибо.
Конкретно в этой задаче общий интерфейс у самописных виджетов будет ограничиваться get/set. Они примитивные. Все запросы к бд выполняет класс-окно. Окон правда похожих на это предостаточно. Буду рад любым наводкам/ссылкам/книгам по реализации вашего способа.
Поясните, пожалуйста. Мои классы отнаследованы от базовых (QLineEdit, QDateEdit и QComboBox соответственно). Как сделать им общий интерфейс, если у них родители разные? Оба мои варианта (IUpdate как второй родитель или IUpdate как шаблон класса) не решают проблему.
//прошу прощения, если спрашиваю что-то базовое
Поясните, пожалуйста. Создать, один раз их написав, не проблема. Хотелось бы потом в цикле по ним ходить. И при генерации запросов (insert и update) получать запрос, написав пару строк, а не перечисляя, боясь забыть, все эти виджеты и их sql поля.
Спасибо за развёрнутый ответ.
Если честно, на наследование от QAbstractTableModel меня натолкнула вот эта статья habrahabr.ru/post/171443
Но сейчас глянув в документацию, увидел функцию
void QSqlTableModel::setFilter ( const QString & filter )
которая решит проблему в поиском. Также есть чудесный класс QSqlRelationalTableModel (так сказать на перспективу). В общем в купе с сортиркой всё, что душе угодно.
1) Но всё же меня беспокоит вот этот абзац в статье на хабре:
"Во-первых, если объем данных большой, то построение модели займет достаточно много времени. Более того, поскольку модель должна быть готова полностью до того, как мы сможем показать ее пользователю, придется прочитать все данные."
Не могли бы вы его прокомментировать.
2) QSortFilterProxyModel знает о том, что он фильтрует QSqlTableModel? Ведь нужно добавлять соответствующий "order by" к запросу.
Спасибо за ответ. На , что делать, когда данные на серверном мастере (я же правильно понимаю, такая репликация называется мастер-мастер) свежее, чем на клиентском, а клиентский мастер хочет сделать update. Eдинственное, что пришло в голову, учитывать время создания запроса и считать при подключении к серверу рассинхрон во времени. Такой подход не кажется мне очень стабильным, к сожалению.