Russian Qt Forum
Сентябрь 30, 2024, 18:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перерисовка самодельного нарисованного виджета - не работает.  (Прочитано 4000 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Июнь 22, 2009, 12:31 »

Здравствуйте!


Я сделал себе виджет, унаследованный от QWidget. Его рисую сам, в paintEvent(). Виджет чем-то похож на QSlider, на нём есть несколько "движков".

При клике по движку и движении мышкой, движок должен двигаться за мышкой. В консоль у меня сыпятся дебаг-сообщения, что движок зацеплен и двигается, меняются его координаты. А на экране ничего не двигается.

При каждом выводе дебаг-сообщения, что у движка новые координаты, я пробовал вызывать

Код:
update();
repaint();
QWidget::update();
QWidget::repaint();
emit update();
emit repaint();

Но на экране ничего не обновляется.

Всё сделано практически  как в примере examples/widgets/analogclock. Только в примере обновление происходит через таймер

Код:
connect(timer, SIGNAL(timeout()), this, SLOT(update()));

а у меня - когда координаты движка изменены. Вот и немогу понять, почему в примере работает обновление, а у меня - нет.


Подобный вопрос уже возникал в теме "Класс, унаследованный от QTextEdit. Не могу обновить изображение текста" 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().
Записан

Собираю информацию по крупицам
http://webhamster.ru
spectre71
Гость
« Ответ #1 : Июнь 22, 2009, 12:42 »

QWidget::setMouseTracking(true); Не забыл сделать, если движение мыши без нажатой кнопки.
Записан
spectre71
Гость
« Ответ #2 : Июнь 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;
у тебя эти условия срабатывают?
Записан
Rcus
Гость
« Ответ #3 : Июнь 22, 2009, 12:52 »

Да это фигня, mouseTracking влияет только на получение событий когда не нажаты клавиши мыши. Настоящая проблема кроется в неправильном использовании ключевого слова static во вспомогательных методах (да, я уже собрал mockup, проверил и все такое). В Analog Clock такое работает, потому что производится поворот painter'а. В представленном случае можно использовать QPainter::translate.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Июнь 22, 2009, 12:54 »

Да это фигня, mouseTracking влияет только на получение событий когда не нажаты клавиши мыши. Настоящая проблема кроется в неправильном использовании ключевого слова static во вспомогательных методах

Ат блин, не увидел. Копипаст из хелпа меня подвел!
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 23.