crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как изменить цвет у текущего элемента в QTableView?
mva
  опции профиля:
сообщение 9.1.2010, 12:48
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Добрый день всем!

Имеется некая форма...



Нужно сделать так, чтобы текущий элемент выделялся другим цветом, отличным от цвета строки. Например так...



Кто может помочь? Заранее спасибо.


Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 9.1.2010, 18:12
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Можно создать делегат, и перекрыть в нем метод paint следующим образом
void Delegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
    if (option.state.testFlag(QStyle::State_HasFocus)) {
        QStyleOptionViewItem opt(option);
        QPalette p = opt.palette;
        p.setColor(QPalette::Highlight, Qt::green);
        opt.palette = p;
        opt.showDecorationSelected = true;

        QItemDelegate::paint(painter, opt, index);
    } else {
        QItemDelegate::paint(painter, option, index);
    }
}


Сообщение отредактировал igor_bogomolov - 9.1.2010, 18:17
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 10.1.2010, 11:51
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Сделал, как Вы подсказали. Работает. Большое спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rrmini
  опции профиля:
сообщение 21.2.2011, 11:34
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 41
Регистрация: 23.11.2009
Пользователь №: 1251

Спасибо сказали: 0 раз(а)




Репутация:   0  


а как изменить цвет текста?
спасибо !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 21.2.2011, 15:15
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Ну, я бы посмотрел описание enum QPalette::ColorRole в ассистанте. Что-то типа
QPalette::HighlightedText

должно подойти. Соответственно
 p.setColor(QPalette::HighlightedText, Qt::red);

Ну может еще попробовать
QPalette::WindowText
QPalette::Text
QPalette::ButtonText
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rrmini
  опции профиля:
сообщение 22.2.2011, 16:45
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 41
Регистрация: 23.11.2009
Пользователь №: 1251

Спасибо сказали: 0 раз(а)




Репутация:   0  


решил задачу так:

void DocDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                        const QModelIndex &index) const
{
    QVariant var =  index.model()->data(index, Qt::TextColorRole);
    QColor col = var.value<QColor>();

    if(index.column() == 7){
        bool state = index.model()->data(index).toBool();
        if(state){
            QString text = tr("да");

            QStyleOptionViewItem myOption = option;
            myOption.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
            myOption.font = QFont("Helvetica", 10, QFont::Bold,false);
            myOption.palette.setColor(QPalette::Text,/*Qt::green*/col);
            drawBackground(painter, myOption, index);
            drawDisplay(painter, myOption, myOption.rect, text);
            drawFocus(painter, myOption, myOption.rect);
        }
        else{
            QString text = tr("нет");

            QStyleOptionViewItem myOption = option;
            myOption.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
            myOption.font = QFont("Helvetica", 10, QFont::Normal,true);
            myOption.palette.setColor(QPalette::Text,col);
            drawBackground(painter, myOption, index);
            drawDisplay(painter, myOption, myOption.rect, text);
            drawFocus(painter, myOption, myOption.rect);
        }
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 13:31