Название: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: schmidt от Март 22, 2013, 18:32 Добрый вечер,
Стандартно при перетаскивании элементов QTableView отображается значение этого элемента рядом с курсором, но ячейки, над которыми протаскивают элемент, никак не подают вида, что сброс осуществляется именно в данную конкретную ячейку. Хотелось бы сделать так, чтобы ячейки изменяли цвет фона, или обрамлялись жирной границей, говоря пользователю "Эй, ты можешь сбросить это в меня!" :) Поиск по интернету дал информацию о том, как реализовать подсветку элемента QTableView в момент наведения на него курсора - с помощью делегата, и выглядит это так: Код: void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, Если я правильно понимаю, то решение моей проблемы состоит в том, чтобы отлавливать событие "начало перетаскивания" и подключать делегат с подсветкой? Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: GreatSnake от Март 23, 2013, 11:02 Код
Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: schmidt от Март 23, 2013, 11:32 По какой-то неясной причине изменение showDropIndicator не дает никакого эффекта. Возможно я где-то в модели чего-то нагородил, перегружая методы, или с событиями QTableView. **Пошел впитывать Drag/Drop документацию полностью :)
Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: GreatSnake от Март 23, 2013, 11:36 Наверняка при наследовании забываешь вызывать метод базового класса.
Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: schmidt от Март 23, 2013, 14:58 Создал тестовый проект, стал поочередно добавлять функционал до тех пор "пока не сломается" :) А сломалось всё после того как я переопределил метод mimeData(). Видимо, и вправду что-то магическое добавляет вызов
Код: QMimeData* data = QAbstractTableModel::mimeData(indexes); к объекту QMimeData, но все вернулось на свои места после этого :) Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: schmidt от Март 23, 2013, 16:57 А если я хочу "прокачать" TableView, чтобы он обрамлял активную область сброса под курсором, если пользователь перетаскивает прямоугольный регион?
Код: void MatrixDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, Есть ли способ из делегата добраться до выделения в QTableView? :) Код: QItemSelectionModel * QAbstractItemView::selectionModel() const Название: Re: Перетаскивание элементов QTableView: подсветка/обрамление ячеек под курсором Отправлено: schmidt от Март 24, 2013, 07:16 Решил проблему иным путем: реализовал собственный делегат с методом setRegionBorder(), в переопределеном методе dragMoveEvent() у TableView вызываю метод setRegionBorder() делегата. В методе paint() делегата проверяю, не лежит ли ячейка на границе заданной setRegionBorder() области, и рисую линию сверху/справа/снизу/слева от ячейки:
Код: //--------------------------------------------------------------------------------------- |