Я работаю над небольшой программой, и у меня есть куча панелей. Я хочу, чтобы, когда я фокусируюсь на панели, она рисовала тонкую линию вокруг нее, чтобы показать, что она сфокусирована. У меня это работает со всеми моими панелями, кроме моего дерева.
Вот пример, который работает с QWidget
:
void Test::paintEvent(QPaintEvent *event)
{
if(hasFocus())
{
QPainter painter(this);
QPen pen(Qt::blue);
pen.setWidth(1);
painter.setPen(pen);
painter.drawRect(geometry());
}
QWidget::paintEvent(event);
}
Когда я использую QPainter
на QTreeWidget
, я получаю эти отладочные сообщения в консоли:
QWidget::paintEngine
: больше не следует вызыватьQPainter::begin
: Устройство рисования вернуло двигатель == 0, тип: 1QPainter::setPen
: Художник не активенQPainter::drawRects
: Художник не активен
Итак, моя проблема в том, что я не могу использовать QPainter
с QTreeWidget
, поэтому я не могу нарисовать свой контур. Есть ли альтернативный метод, который я могу использовать?
paintEvent
вQTreeWidget
? Вы можете вызватьQTreeWidget::paintEvent(event)
для выполнения рисования суперкласса - person msrd0   schedule 16.11.2014QPainter
поэтому?QTreeWidget
должен быть подклассомQWidget
... и, кстати, вы должны добавитьQWidget::paintEvent(event)
внеif
- person msrd0   schedule 16.11.2014QTreeWidget
, это должно работать, но я не знаю, лучший ли это вариант - person msrd0   schedule 16.11.2014QTreeWidget::paintEvent
. Не раньше, чем. Кстати, контент рисуется по области просмотра. - person Dmitry Sazonov   schedule 16.11.2014paintEvent
будет рисовать материалQTreeWidget
поверх всего, что я нарисовал до этого, поэтому я сначала сделалpaintEvent
. - person David Ludwig   schedule 17.11.2014