Моя цель - создать толстый клиент для базы данных. В основном это все об управлении тремя списками данных.
Я бы хотел разделить свое приложение на разделенные слои, поэтому использование инфраструктуры Qt Model / View кажется мне естественным.
- Когда мне следует создавать экземпляры QSql * Model?
Мне нужно иметь возможность подключаться / отключаться от базы данных несколько раз (для этого у меня есть пункты меню). Я не доволен удалением нескольких моделей и созданием их снова при каждом подключении / отключении.
Есть ли альтернативный подход?
- Где мне создавать QSql * экземпляры модели?
Я не думаю, что MainWindow или любой другой связанный с GUI класс должен содержать код, подобный следующему:
m_goodsModel->setRelation(1, QSqlRelation("Level", "LevelId", "Name"));
Я хочу отделить графический интерфейс от структуры данных. Есть идеи как это сделать?
- Когда и где мне связывать свои взгляды с моделями?
Мне нужно представить мои три списка дюжиной способов. Если я буду воссоздавать модели каждый раз, когда я подключаюсь / отключаюсь, мне нужно будет снова добавить вновь созданные модели во все виды.
Было бы замечательно, если бы я мог сделать это только один раз, но я понятия не имею, как.
- Что делать с мерзким
QSqlTableModel::select()
методом?
Этот сводит меня с ума. В отличие от других моделей (например, QStringListModel
, QFileSystemModel
и т. Д.), Где данные готовы к использованию «из коробки», модели, полученные из QSqlTableModel
, бесполезны, пока вы вручную не вызовете их метод select()
. До этого вызова модель пуста, так как представления используют эту модель; данные заголовка также не заполняются, поэтому представление даже не знает, какие столбцы оно должно отображать.
Поскольку я не могу избежать select()
вызова, мне интересно, где я должен положить его так, чтобы он хорошо подходил? Я не думаю, что MainWindow или другие классы, связанные с GUI, должны содержать этот код.
- Производительность и надежность
Я не рад заново инициализировать все после переподключения БД. Это занимает слишком много времени (я имею в виду во время исполнения). Я также хотел бы избежать сбоев в процессе воссоздания модели, поскольку представления могут по-прежнему ссылаться на них.
Нет ли другого способа установить все только один раз и изящно обработать переподключение?