Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ QSqlQueryModel+QSqlRelationalTableModel=...?

Автор: tha_new_usah 13.7.2010, 6:14

Всем привет!
Пишу програмку для диплома, работающую с БД. Сама программа является аналогом уже существующей разработки BusList - то есть, она ведет журнал путевых листов автобусов, помогает составлять заполненные формы путевых листов на основе данных, имеющихся в БД.
В главном окне у меня собственно сам журнал путевых листов, т.е. таблица, которая имеет такие поля, как например, номер автобуса и фамилия водителя, в качестве Foreign Key. Отображаются данные, соответственно, в tableView на форме.
Данные о номере автобуса и водителе берутся из соответствующих таблиц.
Собственно, рилэйшнл тэйбл модел я уже прикрутила, но хотелось бы сделать следующее: чтобы в главном окне программы, в таблице "журнал путевых листов" не отображалось ключевое поле, т.к. я считаю его избыточным.
Вот тут и встает загвоздка, можно реализовать отдельно QSqlQueryModel, чтобы он отображал все столбцы, кроме ключевого, но тогда в столбцах "номер автобуса" и "водитель" будут лишь числовые значения, относящиеся к суррогатному ключу соответствующих таблиц; а можно реализовать отдельно QSqlRelationalTableModel, чтобы пользователь мог наблюдать сразу имена и номера автобусов, но тогда в главном окне появляется столбец "Код записи", который, в общем-то, мешает.

Есть какие-нибудь идеи, как можно скрестить эти два класса? В идеале в итоговом tableView должны быть только нужные столбцы, а так же должны отображаться записи из связанных таблиц.

Автор: maint 13.7.2010, 7:03

Цитата(tha_new_usah @ 13.7.2010, 12:14) *
Всем привет!
Пишу програмку для диплома, работающую с БД. Сама программа является аналогом уже существующей разработки BusList - то есть, она ведет журнал путевых листов автобусов, помогает составлять заполненные формы путевых листов на основе данных, имеющихся в БД.
В главном окне у меня собственно сам журнал путевых листов, т.е. таблица, которая имеет такие поля, как например, номер автобуса и фамилия водителя, в качестве Foreign Key. Отображаются данные, соответственно, в tableView на форме.
Данные о номере автобуса и водителе берутся из соответствующих таблиц.
Собственно, рилэйшнл тэйбл модел я уже прикрутила, но хотелось бы сделать следующее: чтобы в главном окне программы, в таблице "журнал путевых листов" не отображалось ключевое поле, т.к. я считаю его избыточным.
Вот тут и встает загвоздка, можно реализовать отдельно QSqlQueryModel, чтобы он отображал все столбцы, кроме ключевого, но тогда в столбцах "номер автобуса" и "водитель" будут лишь числовые значения, относящиеся к суррогатному ключу соответствующих таблиц; а можно реализовать отдельно QSqlRelationalTableModel, чтобы пользователь мог наблюдать сразу имена и номера автобусов, но тогда в главном окне появляется столбец "Код записи", который, в общем-то, мешает.

Есть какие-нибудь идеи, как можно скрестить эти два класса? В идеале в итоговом tableView должны быть только нужные столбцы, а так же должны отображаться записи из связанных таблиц.

если я правильно понял, надо просто на вьюхе спрятать колонку, не показывать. Смотреть в сторону setColumnHidden(номер_колонки, true)

Автор: tha_new_usah 13.7.2010, 7:07

Цитата(maint @ 13.7.2010, 13:03) *
если я правильно понял, надо просто на вьюхе спрятать колонку, не показывать. Смотреть в сторону setColumnHidden(номер_колонки, true)

Да, точно :) Спасибо, это то, что надо :) Покопаю сегодня в эту сторону :)

Автор: tha_new_usah 20.7.2010, 10:43

В общем, добралась я до этого, всё вроде работает, но появилась одна проблема...
В моем проекте главное окно названо mainwindow, на нем расположен QTableView.

Если я после описания setColumnHidden использую

view->show();

тогда у меня открывается кроме mainwindow еще и дополнительное окошко с QTableView, там все отображается верно (скрыт тот столбец, который требуется)

Если же я использую для вывода данных следующее выражение
ui->tableView->setModel(model);

Тогда мои указания насчет setColumnHidden остаются проигнорированы. То есть все столбцы отображаются "как есть".

Можно это как-нибудь полечить? Не могу что-то сообразить... =(

Кстати,
    ui->tableView->setColumnHidden(0, 1);
    ui->tableView->setModel(model);

Тоже не дает никакого эффекта :(

А вот этот код
    ui->tableView->setColumnHidden(0, 1);
    ui->tableView->show();

не показывает в tableView ровным счетом ничего.

UPD

ААаааааааа... Я идиот....
Всё, разобралась, надо было их местами поменять просто =)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)