Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: deMax от Январь 23, 2015, 10:27



Название: QTreeWidget выделить элемент рамкой
Отправлено: deMax от Январь 23, 2015, 10:27
Как в QTreeWidget выделить одной рамкой "активный" элемент (2 колонки)? Активный элемент выбирается двойным кликом мышки или нажатием enter/space.

Можно ли сделать через делегат или так пойдет?
Код:
void TreeWidgetList::paintEvent(QPaintEvent *event)
{
    QTreeWidget::paintEvent(event);

    if(activeItem!=-1) {
        QPainter p(viewport());
        p.setPen(Qt::red /*Qt::darkGreen*/);
        p.drawRect(visualItemRect(topLevelItem(activeItem)).adjusted(1,1,-1,-1));
    }
}

Если выбрать новый элемент старые рамки остаются(ручками repaint запускать надо)


Название: Re: QTreeWidget выделить элемент рамкой
Отправлено: __Heaven__ от Январь 23, 2015, 10:49
Как насчёт void QTreeView::setAllColumnsShowFocus(bool enable) (http://doc.qt.io/qt-5/qtreeview.html#allColumnsShowFocus-prop)?


Название: Re: QTreeWidget выделить элемент рамкой
Отправлено: Пантер от Январь 23, 2015, 10:49
ИМХО, лучше делегатом сделать, если нужно не все колонки выделять.


Название: Re: QTreeWidget выделить элемент рамкой
Отправлено: deMax от Январь 23, 2015, 11:14
Да нет у меня это по сути список, просто с колонками.

Не могу repaint победить, со старых элементов не стираются рамки. Только свернуть/развернуть работает.

Код:
    if(item<topLevelItemCount()) {
        QRect rect(visualItemRect(topLevelItem(activeItem)));
        activeItem = -1;
        repaint(rect); <--- должен перерисовать старую область
        setCurrentItem(topLevelItem(activeItem = item));
        repaint(visualItemRect(topLevelItem(activeItem)));
    }

Даже просто вызов repaint() не затирает рамки


Название: Re: QTreeWidget выделить элемент рамкой
Отправлено: __Heaven__ от Январь 23, 2015, 12:48
Как насчёт void QTreeView::setAllColumnsShowFocus(bool enable) (http://doc.qt.io/qt-5/qtreeview.html#allColumnsShowFocus-prop)?


Название: Re: QTreeWidget выделить элемент рамкой
Отправлено: deMax от Январь 23, 2015, 14:07
Как насчёт void QTreeView::setAllColumnsShowFocus(bool enable) (http://doc.qt.io/qt-5/qtreeview.html#allColumnsShowFocus-prop)?
Спасибо, так смотрится лучше.
repaint не победил(даже если исправить, как то некрасиво эта рамочка выглядит). Сделал выделение жирным.