Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: stima от Ноябрь 15, 2011, 17:54



Название: QStyldeItemDelegate (CheckBox, cell hovered)
Отправлено: stima от Ноябрь 15, 2011, 17:54
Есть QTableWidget. В ней есть:
чекбокс | колонка1 | колнка2 | колонка3

Я выставлял image чекбокса как:
QTableView::indicator {
   image: url(:/images/checkbox.png);
}

QTableWidget::indicator:checked {
    image: url(:/images/checkbox checked.png);
}

Но решил написать свой делегат, чтобы убрать фокус с itema, а также при hovere мышкой подсвечивать всю строку. При этом данный css не пашет. Мой делегат:

void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem newOption(option);
    QBrush background = painter->background();
    int row = index.row();

    if ( option.state & QStyle::State_MouseOver ) {
        background = QColor(72, 72, 72);
        emit cellHovered(row, background);
    } else {
        emit cellHovered(row, background);
    }

    if ( option.state & QStyle::State_HasFocus ) newOption.state ^= QStyle::State_HasFocus;

    QStyledItemDelegate::paint(painter, newOption, index);
}

как вернуть картинку на checkbox и еще ховер мышкой срабатывает только когда идет выделение itema, как это решить?


Название: Re: QStyldeItemDelegate (CheckBox, cell hovered)
Отправлено: GreatSnake от Ноябрь 15, 2011, 19:39
Поменяй
Код
C++ (Qt)
QStyleOptionViewItem newOption(option);
на
Код
C++ (Qt)
QStyleOptionViewItemV4 newOption(option);


Название: Re: QStyldeItemDelegate (CheckBox, cell hovered)
Отправлено: stima от Ноябрь 15, 2011, 20:51
Спасибо помогло. Но как правильно сделать ховер?)


Название: Re: QStyldeItemDelegate (CheckBox, cell hovered)
Отправлено: asvil от Ноябрь 15, 2011, 23:02
Для ховера всей строки нужно модифицировать вью. setMouseTracking, mouse move event и selectionModel()->selectRow


Название: Re: QStyldeItemDelegate (CheckBox, cell hovered)
Отправлено: stima от Ноябрь 16, 2011, 12:43
Про ховер не совсем понял.

selectionModel()->selectRow вернет индекс на выбранные строки, но зачем мне выбранные строки?
и в mouse move event ловить эти строки? и ставить другой бекграунд?