Название: Перерисовка самодельного нарисованного виджета - не работает. Отправлено: xintrea от Июнь 22, 2009, 12:31 Здравствуйте!
Я сделал себе виджет, унаследованный от QWidget. Его рисую сам, в paintEvent(). Виджет чем-то похож на QSlider, на нём есть несколько "движков". При клике по движку и движении мышкой, движок должен двигаться за мышкой. В консоль у меня сыпятся дебаг-сообщения, что движок зацеплен и двигается, меняются его координаты. А на экране ничего не двигается. При каждом выводе дебаг-сообщения, что у движка новые координаты, я пробовал вызывать Код: update(); Но на экране ничего не обновляется. Всё сделано практически как в примере examples/widgets/analogclock. Только в примере обновление происходит через таймер Код: connect(timer, SIGNAL(timeout()), this, SLOT(update())); а у меня - когда координаты движка изменены. Вот и немогу понять, почему в примере работает обновление, а у меня - нет. Подобный вопрос уже возникал в теме "Класс, унаследованный от QTextEdit. Не могу обновить изображение текста" http://www.prog.org.ru/index.php?topic=9810.msg56703#msg56703 (http://www.prog.org.ru/index.php?topic=9810.msg56703#msg56703). Там посоветовали использовать Код: viewport()->update() но в классе QWidget метода viewport() нет. Да и пример AnalogClock замечательно обновляет свой вид без viewport(). Вопрос - что делаю не так? Заголовок http://paste.org.ru/?xgxis0 Реализация http://paste.org.ru/?kip82q Вызов обновления происходит в методе mouseMoveEvent(). Название: Re: Перерисовка самодельного нарисованного виджета - не работает. Отправлено: spectre71 от Июнь 22, 2009, 12:42 QWidget::setMouseTracking(true); Не забыл сделать, если движение мыши без нажатой кнопки.
Название: Re: Перерисовка самодельного нарисованного виджета - не работает. Отправлено: spectre71 от Июнь 22, 2009, 12:51 Ты посмотри:
if(current_sel_indent==sel_textindent)textindent_pos=x; if(current_sel_indent==sel_leftindent)leftindent_pos=x; if(current_sel_indent==sel_rightindent)rightindent_pos=x; у тебя эти условия срабатывают? Название: Re: Перерисовка самодельного нарисованного виджета - не работает. Отправлено: Rcus от Июнь 22, 2009, 12:52 Да это фигня, mouseTracking влияет только на получение событий когда не нажаты клавиши мыши. Настоящая проблема кроется в неправильном использовании ключевого слова static во вспомогательных методах (да, я уже собрал mockup, проверил и все такое). В Analog Clock такое работает, потому что производится поворот painter'а. В представленном случае можно использовать QPainter::translate.
Название: Re: Перерисовка самодельного нарисованного виджета - не работает. Отправлено: xintrea от Июнь 22, 2009, 12:54 Да это фигня, mouseTracking влияет только на получение событий когда не нажаты клавиши мыши. Настоящая проблема кроется в неправильном использовании ключевого слова static во вспомогательных методах Ат блин, не увидел. Копипаст из хелпа меня подвел! |