crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QItemDelegate и правильное отображение выделения
RazrFalcon
  опции профиля:
сообщение 15.7.2012, 3:57
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Нужно нарисовать QCheckBox вместо текста в ячейке.

С использованием QItemDelegate:
void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                             const QModelIndex &index) const
{
    drawBackground(painter, option, index);
    drawFocus(painter, option, option.rect);
    QStyleOptionViewItemV4 opt(option);
    opt.rect = checkRect(option, option.rect);
    opt.state = opt.state & ~QStyle::State_HasFocus;
    opt.state |= (index.data().toInt() > 0 ? QStyle::State_On : QStyle::State_Off);
    qApp->style()->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &opt, painter);
}


Как видно из скрина - выделение плоское, а не объемное.

Пробовал и QStyledItemDelegate:
void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                             const QModelIndex &index) const
{
    QStyleOptionViewItemV4 opt(option);
    initStyleOption(&opt, index);

    QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
    opt.rect = checkRect(option, option.rect);
    opt.state = opt.state & ~QStyle::State_HasFocus;
    opt.state |= (index.data().toInt() > 0 ? QStyle::State_On : QStyle::State_Off);
    style->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &opt, painter);
}


Теперь выделения нету в принципе.

Некоторыми манипуляциями удавалось отобразить нормальное выделение, но тогда отображается и текст ячейки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 16.7.2012, 17:28
Сообщение #2





Гости








    


Не проще сделать прокси модель, а рисование стандартных контролов оставить "рисовальщикам стандартных контролов" ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.7.2012, 9:27
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 17.7.2012, 12:58
Сообщение #4





Гости








    


Тогда рисуй костыли из делегатов, метод paint у них не для этого переопределяемым сделан, а для того что бы новые контролы можно было нормально в представление интегрировать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 10:01