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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как добавить колонку в QTreeView?  (Прочитано 4545 раз)
moskk
Гость
« : Ноябрь 28, 2012, 18:08 »

всем привет.
задача такая: есть наследник QTreeView, который через наследника QSqlTableModel отображает таблицу из БД. в таблице есть три поля с флагами (значениями 1/0), которые отображаются в отдельных колонках. нужно сделать так, чтобы они отображались в одной отдельной колонке в виде трёх значков. на дерево установлен делегат для отрисовки клеток.

есть вариант создать отдельную колонку в дереве, и в ней рисовать виджет, а те три колонки спрятать. во вью колонку не добавить, как я понимаю, добавлять надо в модель. в связи с этим вопрос: если добавить колонку в модель, не добавится ли она в базу?

upd: подозреваю, что не добавится, но рисковать базой не хочется, она мне дорога как память Улыбающийся
« Последнее редактирование: Ноябрь 28, 2012, 18:33 от moskk » Записан
Bepec
Гость
« Ответ #1 : Ноябрь 28, 2012, 19:55 »

копируйте базу и пробуйте.
Записан
moskk
Гость
« Ответ #2 : Ноябрь 29, 2012, 14:07 »

ну, напрмер, пишу в конструкторе модели:
Код
C++ (Qt)
   //beginInsertColumns(createIndex(0, 0), 0, 1);// это не надо, как я понял
   bool ok = insertColumn(0);
   //endInsertColumns(); // и это
может, я что не так делаю? в первый раз же...
визуально ничего нигде не меняется, хотя insertColumn вернуло true.

в доках написано:

bool QAbstractItemModel::insertColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) [virtual]
On models that support this, inserts count new columns into the model before the given column.


а как бы узнать, поддерживает или нет? и если нет, то как быть? можно, конечно, добавить лишнюю колонку в базу, или рисовать на одной из тех трёх, но как-то это костыльно выглядит...

upd: тут внезапно оказалось, что QSqlTableModel данные берёт в базе не из таблицы, а из вьюшки. собственно, в неё добавили одно поле вместо старых трёх - проблема снялась. но если кто знает, как такое сделать, не корёжа базу - расскажите, пожалуйста.
« Последнее редактирование: Ноябрь 29, 2012, 14:50 от moskk » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Ноябрь 29, 2012, 15:11 »

а как бы узнать, поддерживает или нет?
открыть исходники QSqlTableModel и посмотреть

попробуй вставить колонку после того, как вью отобразился
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #4 : Ноябрь 29, 2012, 15:28 »

Если вам не нужно мгновенное отображение изменений (флаги не меняются мгновенно), мб вам тогда стоит написать мини модельку, которая будет запрашивать данные, их парсить и показывать? Вот тут правда уже другой вопрос по изменению встанет, но чисто изза моей неопытности.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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