Russian Qt Forum

Qt => Model-View (MV) => Тема начата: VokilaM от Февраль 10, 2010, 12:11



Название: Полупрозрачное выделение в QTableView
Отправлено: VokilaM от Февраль 10, 2010, 12:11
Приветствую
Я использую QTableView для редактирования пискелей изображения. Есть модель, которая ставит в соответствие цвет пиксела изображения цвету ячейки, используя роль Qt::BackgroundRole.

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

Картинка http://www.fotohost.by/v.php?id=5fd5766c537ce33b0fd47aa9e9954f9b (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 (http://www.fotohost.by/v.php?id=c01b2ce5fd091c568ea8ecd0aff29945)

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

Существуют ли еще варианты, и как найти решение варианта #2?


Название: Re: Полупрозрачное выделение в QTableView
Отправлено: VokilaM от Февраль 15, 2010, 23:37
эх


Название: Re: Полупрозрачное выделение в QTableView
Отправлено: break от Февраль 16, 2010, 00:29
Цитировать
Я использую QTableView для редактирования пискелей изображения.
Неожиданное применение TableView - может стоило копать в сторону GraphicsView или собственного виджета?


Название: Re: Полупрозрачное выделение в QTableView
Отправлено: lit-uriy от Февраль 16, 2010, 05:27
>>Неожиданное применение TableView
%QTDIR%\examples\itemviews\pixelator
:)


Название: Re: Полупрозрачное выделение в QTableView
Отправлено: VokilaM от Февраль 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);");