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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пример делегата для закраски фона ячейки  (Прочитано 7038 раз)
stealth
Гость
« : Август 17, 2007, 23:04 »

Доброго времени суток!
Обыскался сабжа, но так ничего рабочего и не нашел.
Нужен простой пример закраски ячейки например в красный цвет.
Спасибо!
Записан
SABROG
Гость
« Ответ #1 : Август 18, 2007, 09:04 »

Версия Qt.

Нужен именно делегат или стандартные способы тоже прокатят, типа этого ?

Код:

void QStandardItem::setBackground ( const QBrush & brush )
Записан
Gryz
Гость
« Ответ #2 : Август 18, 2007, 09:56 »

Еще вариант.
Наследуешься от QItemDelegate
и переопределяешь:

void drawBackground ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const.

В option содержатся всяческие данные, описывающие параметры для отрисовки элемента
Записан
stealth
Гость
« Ответ #3 : Август 20, 2007, 10:14 »

Нужно именно через делегата.
void drawBackground ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const.
про него я в курсе, на него впринципе пример и ищу. Все мои попытки сделать что-то через него не проходят. Находил через гугл пример реализации подсветки в редакторе Kate, но что-то тоже не заработало на ячейках.
Записан
denka
Гость
« Ответ #4 : Август 20, 2007, 10:34 »

Попробуй возвращать нужный цвет моделью. То есть у тебя индекс модели должен возвращать QBrush на:
 index.data(Qt::BackgroundRole);
Именно это значение запрашивает QItemDelegate::drawBackground если элеммент не выделен. Если не подойдет такое поведение делегата то тогда дейтсвительно надо переопределять drawBackground.  Улыбающийся
« Последнее редактирование: Август 20, 2007, 10:39 от den'ka » Записан
stealth
Гость
« Ответ #5 : Август 21, 2007, 18:25 »

Опять же need пример переопределения drawBackground Улыбающийся
Записан
EhTemka
Гость
« Ответ #6 : Август 21, 2007, 20:48 »

Код:
void GuiDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                           const QModelIndex &index) const
{
    if (index.column() != Gui::COLUMN_IMAGE) {         
        QStyleOptionViewItem opt(option);               
        opt.decorationSize = QSize(0, 0);         

        if (option.state & QStyle::State_Selected) {
            QColor colIndex = index.data(Qt::BackgroundColorRole).value<QColor>();
            //QBrush brush;
            QPalette palette;
            if ((colIndex.blue() + colIndex.red() + colIndex.green() + colIndex.alpha()) < 1020) {
                //brush.setColor(QColor(0,0,255,30));
                palette.setColor(QPalette::Normal, QPalette::Highlight, QColor(0,0,255,30));
            } else {
                //brush.setColor(QColor(0,0,255,255));
                palette.setColor(QPalette::Normal, QPalette::Highlight, QColor(0,0,255,255));
            }

            painter->fillRect(option.rect, colIndex);
            painter->fillRect(option.rect, palette.highlight()/*brush*/);
        }
        QItemDelegate::paint(painter, opt, index);
    } else {

        if (!index.data(Qt::DecorationRole).isNull()) {
            QImage pic = index.data(Qt::DecorationRole).value<QImage>();
            painter->drawImage(option.rect, pic, pic.rect());                     
        } else {           
            bool wait = mod_->getWait();
            if (!wait) {                       
                //if (!index.data(Qt::DisplayRole).isNull()) {
                    QModelIndex *ind = new QModelIndex(index);
                    mod_->setPic(ind);
                //}
            }             
        }       
    }

    QPen pen = painter->pen();
    QPen newPen(Qt::black);   
    newPen.setWidth(1);
    painter->setPen(newPen);     
    painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
    painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
    painter->setPen(pen);   
}

такой пойдет?
Записан
stealth
Гость
« Ответ #7 : Август 21, 2007, 22:20 »

Спасибо, подойдет конечно! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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