Название: как связаны hoverEnterEvent(...) и paint(...) у потомков QGraphicsItem? Отправлено: Гурман от Апрель 09, 2010, 11:14 я уже голову сломал... надо переделать чужой код, вроде не сложный, сделал как должно быть, но не работает, а где смотреть - уже глаза замылились, не вижу проблему, может кто подскажет
итак, есть класс A:QGraphicsItem, в нем заданы некие общие характеристики отображения, рисовать он сам ничего не умеет - есть класс B:A, он умеет рисовать разные текстовые объекты (есть еще класс X:A, который тоже рисует, но другое); - есть классы C:B и D:B, которые содержат разные тексты, и отображаются они немного по-разному; - в классе B есть методы обработки наезда курсором, в которых устанавливается цвет фона при наезде, и меняется назад при уходе (там делается darker/lighter); - в классе B есть такой рисователь: Код: void Gitext::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) bgColor - поле класса A, его изменяет метод обработки наезда курсором, проверено, изменяет во всех случаях: Код: void B::hoverEnterEvent(QGraphicsSceneHoverEvent *event) при этом классы С и D имеют почти одинаковые paint, которые выглядят примерно так: Код: void С/*или D*/::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) пытаюсь ходить отладчиком - без толку, после входа в hoverLeaveEvent в paint я не попадаю, хотя вроде бы должен, попадаю в него только после отработки hoverLeaveEvent, причем это для обоих классов С и D, но в таком случае когда же у С успевает поменяться фон??! в общем, совершенно не понятно, когда при обработке события "наезд мышью" производится перерисовка, поэтому я не могу отследить где в чужом коде меняется цвет фона (а он точно правильно устанавливается в hoverEnterEvent) если перерисовка вызывается при update(), то не понятно, почему отладчик не останавливается в paint() при вызове update() из hoverEnterEvent() - причем не понятно, почему в обоих случаях не останавливается, хотя в одном фон меняется, в другом нет, оба айтема не перекрыты, оба видимы, то есть "задержанный paint" должен вызываться похоже здесь какой-то подводный камень, хелп, в общем... АААА!!!!... Блин.... в дополнение к изменению фона сделал изменение шрифта - шрифт меняется, а фон нет! вот же засада! >:( Название: Re: как связаны hoverEnterEvent(...) и paint(...) у потомков QGraphicsItem? Отправлено: Гурман от Апрель 09, 2010, 13:25 вот же ексель моксель... сделал отладочную трассировку - в paint() для обоих классов все правильно вызывается, painter->setBrush( QBrush(bgColor) ); меняет цвет фона как надо... но почему-то у одного класса это отображается, а у другого нет
HELP!!! Название: Re: как связаны hoverEnterEvent(...) и paint(...) у потомков QGraphicsItem? Отправлено: GreatSnake от Апрель 09, 2010, 14:25 Может я чего не разглядел, но я не вижу чем вы заливаете фон элемента - не вижу вызова метода QPainter-a (drawRect(), drawPolygon() ...).
По умолчанию все элементы сцены прозрачные. Название: Re: как связаны hoverEnterEvent(...) и paint(...) у потомков QGraphicsItem? Отправлено: Гурман от Апрель 09, 2010, 14:43 фуууфффф... это я уже перегрелся.... хорошо хоть пятница сегодня...
|