Я хочу создать программное обеспечение, которое будет просматривать некоторые таблицы базы данных, и пользователи смогут редактировать эти таблицы. После моего чтения этого link я решила, что модель/представление было хорошим подходом к тому, что мне нужно. Посмотрите следующий макет: Основная концепция модели Qt/view и QTableView
Зная это, у меня есть вопросы, чтобы быть уверенным, что я понимаю концепцию. Пожалуйста, сообщите мне, если я нахожусь в хорошем направлении:
Я думаю, мне нужно создать класс модели для каждой из моих таблиц? (подклассификация QAbstractModel). Он будет выглядеть следующим образом:
class citiesTableModel : public QAbstractItemModel { Q_OBJECT }
citiesTableModel конструктор будет получать данные из таблицы в базе данных?
QAbstractItemModel *model = new citiesTableModel(); //model will contain 2 rows, New York and Seattle
Мне нужно создать подкласс QTableView для каждой другой модели делать?
class citiesTableView : public QTableView{}
- Finnaly, я предполагаю, что view.setData и view.setModel должны быть переписана? setModel будет циклически перемещаться по каждой строке модели, чтобы построить QTableView , а setData выполнит правильный запрос для добавления новых данных в модель ?
спасибо.
Thx для вашего ответа. На самом деле это выглядит немного легче, чем я. Вопрос: Наша база данных - postgreSQL. Вы знаете, работает ли QSqlTableModel с этой базой данных? Кроме того, для стратегии редактирования на самом деле не может быть изменено через tableview, только с формой (ниже tableview). Делает ли это еще проще? Finnaly, вы уверены, что мне не нужно подклассифицировать QTableView? Если я хочу конвертировать boolean в checkbox? Thx – peterphonic
Да, он может работать с любой базой данных, если у вас есть подходящий плагин qt sql. Да, можно редактировать данные через таблицу. Чтобы отображать логические значения как флажки, вы должны использовать [делегировать классы] (http://qt-project.org/doc/qt-4.8/model-view-programming.html#delegate-classes). – hank
Thx снова для вашего ответа. Что-то, что я был недостаточно ясен. На самом деле это дизайнерское решение. Что мы хотим: пользователь не сможет редактировать представление таблицы непосредственно. Пользователь должен будет сначала выбрать строку, и форма будет заполнена соответствующим образом, и пользователь изменит форму. – peterphonic