Russian Qt Forum
Ноябрь 23, 2024, 19:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Размышления на тему QSqlTableModel и виртуальных колонок  (Прочитано 5478 раз)
Paullo
Гость
« : Август 04, 2010, 15:04 »

В программировании на Qt я новичок, присматривался давно, но ни одного полноценного проекта так и не написал.
Итак, возникли некоторые вопросы:
1. Когда использую QSqlTableModel::insertColumn() в середину таблицы происходит фигня следующего рода: таблица после вставленной колонки сдвигается на два столбца вправо, последняя колонка теряется. Вопрос в следующем - это bug или feature? Подумал что баг и даже багрепорт оформил: http://bugreports.qt.nokia.com/browse/QTBUG-12626
2. Соответственно хочется иметь виртуальную колонку в таблице. А ещё хочется прикрутить к этой колонке какой-нибудь скриптовый язык. Чтобы пользователь сам мог написать то что он хочет в этой виртуальной колонке видеть.

Первое что пришло в голову - использовать XmlPatterns, а в частности XQuery. Инструмент достаточно мощный, но сразу же наткнулся на проблему форматирования даты (Гугл привёл меня к функции fn:format-dateTime(), которая как я понял работает только с XSL-T версии 2.0, а XQuery её упорно не видит). Так вот - может у кого был опыт реализации подобных штук? Может использовать вместо XQuery что-нибудь другое что я упустил в связи с не очень обширным знанием Qt?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Август 04, 2010, 18:28 »

как-то шаблоны XML у меня ни с SQL, ни с формулами вообще не ассоциируется.

Сделать колонку в табличной модели не сложно (табличную модель писать проще чем древовидную).

Формулы можно попробовать анализировать с помощью Qt Script.
Записан

Юра.
Paullo
Гость
« Ответ #2 : Август 04, 2010, 19:31 »

Ну на данный момент есть реализация с XQuery, которая вполне себе даже работает. Работает но не до конца из-за бага который указал под первым номером. Просто сейчас при возвращении значений из таблицы с виртуальной колонкой использую QSqlQueryModel::data() вместо QSqlTableModel::data(). Минусом является то что по сути при такой операции я получаю read only модель. Но без сдвига колонок. Можно конечно самому колонку создать, и без insertColumn, но тогда придётся у себя хранить данные Header'а и сдвиг в функции data() самому считать, что по моему тяжело и некрасиво.

А касательно XQuery - в данный момент класс работает так - существует функция создания колонки, в которую передаётся соответственно запрос XQuery и название колонки. После добавления колонки запрос прогоняется для каждого столбца, а результаты сохранятся в QHash. Запрос парсится по простому принципу - допустим запрос выглядит так: concat('Великий ', $name). Соответственно $name биндится к колонке name, если такая есть, после чего выполняется. И так для каждой строки.

QtScript, я так понимаю, имеет возможность доступа к QObject properties, на чём собственно всё и строится.
...Просто не очень в голову лезет алгоритм с помощью которого QtScript использовать можно...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Август 04, 2010, 23:02 »

модель свою надо делать. Можно унаследоваться от QSqlTableModel
Записан

Юра.
Paullo
Гость
« Ответ #4 : Август 04, 2010, 23:33 »

Ну в данный момент модель своя и унаследована от QSqlTableModel Улыбающийся Только вот как эту модель в QtScript использовать, да ещё так чтобы получить что-то простое и понятное для пользователя не особо с программированием знакомого?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Август 05, 2010, 00:17 »

где-то тут на форуме была тема посвящённая синтаксическому разбору арифметических операций.
Один из вариантов был не писать анализатор самому, а скормить формулу (существующую в виде строки) движку QtScript.
Подробностей не помню.
Записан

Юра.
Paullo
Гость
« Ответ #6 : Август 05, 2010, 19:00 »

На всякий случай если кому понадобится:
http://www.prog.org.ru/topic_7052_0.html - QtScript и разбор выражений
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.