Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Здравствуйте, гость ( Вход | Регистрация )
Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Steklova Olga |
14.3.2012, 13:59
Сообщение
#1
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Здравствуйте У меня в таблице БД есть поле BLOB для хранения текста.
Вопрос 1. Почему у меня некорректно (крокозябрами) отображается русский текст из BLOB в колонке QTableView ? Вопрос 2. Как сделать, чтобы текст в колонке с BLOB не отображался весь в одну строку, а переносился ? Вопрос 3. Что делать с шириной колонки для поля BLOB ? Ограничивать ? Мои предположения: - не в той кодировке пишу данные в БД ? - не везде, где надо, правильно указала кодировку ? - мне необходимо создать делегат, чтобы в каждой ячейке QTableView колонки с BLOB был виджет QTextEdit ? (Сейчас никакого делегата для этого QTableView у меня нет.) Делаю так: в скриптах при создании БД:
В IBExpert при регистрации БД указываю: - Charset = WIN1251 - оставляю не включенным (как по умолчанию и есть) флаг Do NOT perform conversion from/to UTF8 - Font Characters Set = RUSSIAN_CHARSET При этом в IBExpert данные поля BLOB таблицы отображаются корректно, как и при включенном флаге (не совсем понимаю, что делает этот флаг). в main.cpp:
в mainwindow_db.cpp (в главном окне):
в mainwindow_db.h:
|
|
|
Litkevich Yuriy |
4.4.2012, 11:03
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Вобщем есть такая проблема:
По моему (и не только) разумению Qt должна сама разруливать ситуацию с кодировками, ведь есть функции типа QObject::trUtf8(). Т.е. указывается только кодировка исходника, дальнейшие действия идут сами по себе, т.к. внутри Qt всегда одна и та же кодировка. Так же должно быть и в случае с БД, драйвер запрашивает кодировку из БД и сам всё конвертирует туда-сюда. На практике: драйвер считает что данные из БД идут "только на английском" (т.е. кодировка Си строк) - что есть бред. Мало того, родной (от Тролтеха/Нокии) драйвер интербэйза кривой, насколько я помню для Qt версии до 4.5 невозможно задать параметры соединения (как минимум кодировку). Была попытка исправить кучу грехов на прог.орге название темы сейчас не помню, но тогда чувак родил более-мение вменяемый драйвер. Когда ты устанавливаешь кодировку для Си-строк, то работает одна БД. А вот представь себе, если тебе нужно работать с несколькими БД одновременно и у них разные кодировки (реальная жизнь). На данном этапе задача для стандартных драйверов Qt не решаемая. |
|
|
Текстовая версия | Сейчас: 1.12.2024, 3:06 |