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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Полупрозрачное выделение в QTableView  (Прочитано 5921 раз)
VokilaM
Гость
« : Февраль 10, 2010, 12:11 »

Приветствую
Я использую QTableView для редактирования пискелей изображения. Есть модель, которая ставит в соответствие цвет пиксела изображения цвету ячейки, используя роль Qt::BackgroundRole.

Задача:
сделать выделение блока ячеек в таблице полупрозрачным, то есть, чтобы прямоугольник выделения затенял цвета выделенных ячеек, а не заливал их сплошным одним цветом.

Картинка http://www.fotohost.by/v.php?id=5fd5766c537ce33b0fd47aa9e9954f9b

Вариант #1:
Код:
QTableView* tv = new QTableView();
tv->setStyleSheet("selection-background-color: rgba(0, 0, 0, 100);");

выделение становится прозрачным, но за выделением находтися фон виджета, а не ячейки. То есть, если фон виджета белый, то прозрачность в 100 единиц дает серое сплошное выделение.

Картинка http://www.fotohost.by/v.php?id=c01b2ce5fd091c568ea8ecd0aff29945

Вариант #2:
наследовать QItemDelegate

Существуют ли еще варианты, и как найти решение варианта #2?
« Последнее редактирование: Февраль 13, 2010, 18:57 от VokilaM » Записан
VokilaM
Гость
« Ответ #1 : Февраль 15, 2010, 23:37 »

эх
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Февраль 16, 2010, 00:29 »

Цитировать
Я использую QTableView для редактирования пискелей изображения.
Неожиданное применение TableView - может стоило копать в сторону GraphicsView или собственного виджета?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Февраль 16, 2010, 05:27 »

>>Неожиданное применение TableView
%QTDIR%\examples\itemviews\pixelator
Улыбающийся
Записан

Юра.
VokilaM
Гость
« Ответ #4 : Февраль 17, 2010, 10:07 »

да, помогло

Код:
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if (option.state & QStyle::State_Selected) {
        QBrush brush = index.data(Qt::BackgroundRole).value<QBrush>();
        painter->fillRect(option.rect, brush);
    }

    QItemDelegate::paint(painter, option, index);
}
Код:
tv = new QTableView();
tv->setStyleSheet("selection-background-color: rgba(100, 100, 100, 100);");
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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