divius 09.05.2010 23:08
Есть вопрос! — Qt: Добавление лишнего столбца в QTreeView
Встала такая задача: есть QTreeView, в него загружается информация из базы данных, надо добавить ещё одну колонку, в которой на основании некоторых полей из БД кое-что рисовать.Как рисовать, я уже разобрался, а вот как добавить лишний столбец? Единственный вариант, который я нагуглил - сделать proxy-модель (QAbstractProxyModel, емнип), но сложность этой операции неадекватна задаче - новую модель делать не хочется.
Буду рад любым идеям, заранее спасибо.
digiwhite 09.05.2010 23:19 #
+ 0 -
А другого способа ИМХО кроме как создания новой модели нет. Т.е. унаследоваться от QAbstractItemModel и реализовать то что надо. По крайней мере я делал так.
в которой на основании некоторых полей из БД кое-что рисовать
А сложный запрос написать? Или под словом "рисовать" имеется в виду именно картинка? Тогда если лень выпендриваться с model/view можно написать тупо на QTreeWidget + QSqlQuery.
Имеется в виду именно картинка. Одна модель уже используется, дописывать это в неё очень не хотелось бы - она и так перегружена.
Можно например попробовать QItemDelegate.
Примерчик:
Рисует градиент на итеме, на который навели мышку.
Примерчик:
class SimpleDelegate : public QItemDelegate
{
public:
SimpleDelegate(QObject *obj = 0) : QItemDelegate(obj)
{
}
void paint(QPainter* painter, const QStyleOptionViewItem &style, const QModelIndex& index)const
{
if (style.state & QStyle::State_MouseOver)
{
QRect rect(style.rect);
QLinearGradient gradient(0, 0, rect.width(), rect.height());
gradient.setColorAt(0, Qt::white);
gradient.setColorAt(0.5, Qt::green);
gradient.setColorAt(1, Qt::blue);
painter->setBrush(gradient);
painter->drawRect(rect);
}
QItemDelegate::paint(painter, style, index);
}
};
Рисует градиент на итеме, на который навели мышку.
Как рисовать я знаю, мне столбец новый для рисования надо добавить!
Тогда только проксю писать или модель править, больше идей нет.
Ворнинг: если данных реально много, будет жрать память. Я однажды игрался с таблицей 100.000x100.000 и убрал систему в глубочайший своп.
Считаю, что данный вопрос слабо коррелирует с тематикой сайта, Qt, слава богу, кроссплатформная штуковина.
Для вопросов про Qt есть же http://prog.org.ru/
Для вопросов про Qt есть же http://prog.org.ru/
Да ладно, нормально. Не знаю насчет реального распределения, но среди моих знакомых Qt'шников абсолютное большинство - линуксоиды.
GTKлюб и Qtненавистник?
Я думал такое восприятие вопроса по Qt на ресурсе может быть только у GTKшников =)
>Да ладно, нормально.
Я тут как-то раз задал вопрос о VLC, так меня молча заминусовали...
Я тут как-то раз задал вопрос о VLC, так меня молча заминусовали...
а как по мне, какая разница какие ГУИ-библиотеки использовать(Qt или GTK), что удобнее на том и пиши.