crossplatform.ru

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

mva
  опции профиля:
сообщение 9.1.2010, 12:48
Сообщение #1


Участник
**

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

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




Репутация:   0  


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

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



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



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


Эскизы прикрепленных изображений
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 72%
Прикрепленное изображение
918 x 413 (17.43 килобайт)
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 68%
Прикрепленное изображение
807 x 378 (16.46 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 5)
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
Эскизы прикрепленных изображений
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 52%
Прикрепленное изображение
549 x 279 (14.55 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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 Рейтинг@Mail.ru Текстовая версия Сейчас: 16.6.2025, 3:37