Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: lxlight от Октябрь 03, 2007, 20:47



Название: Рисование focus rectangle на QTreeWidgetItem
Отправлено: lxlight от Октябрь 03, 2007, 20:47
Всем привет.
В общем нужно в событии dragMoveEvent рисовать focus rect вокруг айтема под курсором, никак не получается это реализовать, может кто подскажет как? Прбовал через QPainter:
Код:
QPainter painter( this );
painter.setPen( Qt::DashLine );
painter.drawRect( this->visualItemRect(i) );
Но судя по "QPainter::begin: Widget painting can only begin as a result of a paintEvent" рисовать можно только внутри paintEvent а мне не хотелось бы его полностью переписывтаь:(


Название: Re: Рисование focus rectangle на QTreeWidgetItem
Отправлено: pastor от Октябрь 03, 2007, 21:15
Ну так запихниуте код рисования в paintEvent добавив определённые условия, при котором должна рисоваться rect. Какая проблема?


Название: Re: Рисование focus rectangle на QTreeWidgetItem
Отправлено: lxlight от Октябрь 04, 2007, 14:28
Проблема в том, что такое поведение виджета (рисование рамки фокуса) является стандартным и уже реализовано (если не переписывать dragMoveEvent, то все замечательно, за исключением того что мне нужно поместить свой код именно в этот метод), а потому не хочется городить велосипеды и к томуже заново реализовывать перерисовку всего содержимого виджета.


Название: Re: Рисование focus rectangle на QTreeWidgetItem
Отправлено: Hellraiser от Октябрь 04, 2007, 17:57
Проблема в том, что такое поведение виджета (рисование рамки фокуса) является стандартным и уже реализовано (если не переписывать dragMoveEvent, то все замечательно, за исключением того что мне нужно поместить свой код именно в этот метод), а потому не хочется городить велосипеды и к томуже заново реализовывать перерисовку всего содержимого виджета.
Так что мешает выполнить свои действия и в конце вызвать dragMoveEvent родителя?


Название: Re: Рисование focus rectangle на QTreeWidgetItem
Отправлено: Dodge от Октябрь 05, 2007, 13:07
Похоже автор несовсем понял метод решения...

Приведу пример:
Код:
void QMyWidget::paintEvent( QPaintEvent * event ) {

      if ( dragitem ) {
          QPainter painter( this->viewport() ); // или просто this, зависит от виджета
          // рисуем свой фокус рект
      }

       QWidget::paintEvent( event );
}