Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: PavelVX от Декабрь 13, 2010, 09:11



Название: Как правильнее создать пользовательскую форму?
Отправлено: PavelVX от Декабрь 13, 2010, 09:11
Перехожу с МС Аксеса на Qt и очень многое непривычно. Посоветуйте, как правильно сделать следующую форму(в общих чертах хотя бы).
Вводная: есть таблица - таблица_заказы. Есть форма - форма_заказы, в которой она будет редактироваться. Есть связанная с ней форма - форма_заказ_товары, в которой будет отображаться содержимое заказа(данные обновляются при смене строки заказа в форме форма_заказы).
Непонятки в следующем:
1. Поскольку форма_заказы должна быть редактируемой, в ней несколько внешних ключей(клиенты, статус обработки заказа), то модель создается на основе QSqlRelationalTableModel, прописываем отношения и создаем делегаты. Но как сделать сортировку по двум полям(order by date, naim) для данной модели? Причем naim это значение внешнего ключа kod_clienta к этой таблице?
Может в данном случае сделать форму на другой модели?
2. Если включить QTableView->setSortingEnabled(true); то у колоночек появляются треугольнички сортировок. Но сортирует оно не совсем правильно(возможно сортировка берется с постгре сервака/сортировка учитывает только цифры/буквы, пробел не учитывает :(). Можно ли как-то переопределить параметры сортировки для приложения?
3. Как-то можно инициировать событие before_update для QComboBox? Типа если все значения в заказе валидны, то только тогда разрешать менять значения в комбобоксе. Или данные действия нужно делать для модели, просто проверяя какое поле изменяют?
4. Раскраска. Как раскрасить определенные поля/строки в QTableView?
Советы приветствуются, примеры рассматриваются :).


Название: Re: Как правильнее создать пользовательскую форму?
Отправлено: Whiplash от Декабрь 13, 2010, 10:10
Всмысле, как сортировку сделать? Ты же написал - order by date, naim. Делаешь запросом да и всё. Вообще, нафиг тебе эта QSqlRelationTableModel? Делай лучше всё на QSqlQueryModel - она хоть более-менее прозрачная, в плане sql-запроса имею ввиду. Все вопросы с сортировкой отпадут.
Чтобы раскрасить QTableView нужно наследовать модель и переопределять там метод data.


Название: Re: Как правильнее создать пользовательскую форму?
Отправлено: PavelVX от Декабрь 13, 2010, 10:23
А QSqlQueryModel я смогу редактировать находу? Или придется все делать через запросы?


Название: Re: Как правильнее создать пользовательскую форму?
Отправлено: Whiplash от Декабрь 13, 2010, 18:16
А QSqlQueryModel я смогу редактировать находу? Или придется все делать через запросы?

Я думаю, что лучше "делать через запросы", чем "редактировать на ходу". Более того, я категорически против подхода "редактировать на ходу".


Название: Re: Как правильнее создать пользовательскую форму?
Отправлено: PavelVX от Январь 17, 2011, 13:50
Сорри, но возвращаюсь к данной теме. Но толи лыжи не едут, то ли как-то сильно непривычно.
Создал тестовый проект под win платформой. Qt 4.7
Под линем установил Qt 4.5.
Подсовываю этот проект под линь, компилирует, запускает, но в QSqlRelationTableModel не понимает таблиц написанных кирилицей в разном регистре(ТаблицаКлиентов). Крутил, вертел, не могу подцепить никак. Причем, если заменить на QSqlQueryModel и прописать "select * from ТаблицаКлиентов" то все селектит. Никто не подскажет, в чем может быть дело? Прописал QTextCodec::codecForName("CP1251") под линем.
Проблема оказалась хуже, чем я думал: Qt не понимает названий таблиц в разном регистре вообще :(. Даже на латинице :(.
Whiplash, а как в QSqlQueryModel делегаты прикручивать? И вообще редактировать?