Russian Qt Forum

Qt => Model-View (MV) => Тема начата: moskk от Ноябрь 28, 2012, 18:08



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

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

upd: подозреваю, что не добавится, но рисковать базой не хочется, она мне дорога как память :)


Название: Re: как добавить колонку в QTreeView?
Отправлено: Bepec от Ноябрь 28, 2012, 19:55
копируйте базу и пробуйте.


Название: Re: как добавить колонку в QTreeView?
Отправлено: moskk от Ноябрь 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 данные берёт в базе не из таблицы, а из вьюшки. собственно, в неё добавили одно поле вместо старых трёх - проблема снялась. но если кто знает, как такое сделать, не корёжа базу - расскажите, пожалуйста.


Название: Re: как добавить колонку в QTreeView?
Отправлено: kambala от Ноябрь 29, 2012, 15:11
а как бы узнать, поддерживает или нет?
открыть исходники QSqlTableModel и посмотреть

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


Название: Re: как добавить колонку в QTreeView?
Отправлено: Bepec от Ноябрь 29, 2012, 15:28
Если вам не нужно мгновенное отображение изменений (флаги не меняются мгновенно), мб вам тогда стоит написать мини модельку, которая будет запрашивать данные, их парсить и показывать? Вот тут правда уже другой вопрос по изменению встанет, но чисто изза моей неопытности.