LINUX.ORG.RU

qt


0

0

Здравствуйте, вот только только разбираюсь с qt. Надо нарисовать движущийся элипс (c++ + qt). Нарисовал стоячий элипс через drawEllipse(x,y,w,h). Вообще не понимаю как его типо стереть и перерисовать, у меня получается куча элипсов в разных местах. Мне люди говорят типо update формы, но отрисовка у меня идет в main.cpp а вся отрисовка в другом модуле. Короче я вообще запутался в qt, подскажите с нуля прям. Читаю книгу по qt4, но там както несильно распинываются чо и как:(

★★

1. с XOR наложением, стираешь старый со старыми координатами, рисуешь новый
2. закрашиваешь (стираешь фон), рисуешь с новыми координатами
3. делаешь двойную(или тройную) буферизацию: рисуешь в буфер, on update выводишь буфер на экран
4. а чо, просто из update старый фон не стирается?
5. посмотри примеры из Qt Demo насчёт OpenGL

anonymous
()

рисовать надо в paintEvent(), как - сказали выше. Иначе при первой же перерисовке все твои эллипсы сотрутся.

alex_custov ★★★★★
()

Пройди tutorial из Ассистэнта. там создаётся шаг за шагом оч простая игрушка, с отрисовкой движущихся предметов. Тогда я думаю вопросов не будет таких возникать.

teferiincub
()
Ответ на: комментарий от teferiincub

Почитал, посмотрел, попробовал разобрать(туториал из ассиста), видно не судьба:(

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Ой да ладно, "не судьба" ему... Qt -- один из лучших framework-ов на плюсах, очень логичный и понятный. Ты ленишься, наверное, в нём покопаться. :-)

one_more_hokum ★★★
()
Ответ на: комментарий от one_more_hokum

(в main.cpp)Ну смотри я создаю объект(у меня он ovenTimer) класса(у меня ovenTimer), который наследуется от Qwidget. Задаю у него размер (это типа форма у меня главная):
ovenTimer.setWindowTitle(QObject::tr("Oven Timer"));
ovenTimer.resize(200, 200);
Потом отрисовываю его:
ovenTimer.show();
Управление передается(в другой модуль) в ovenTimer::paintEvent,тут я создаю указатель на объект типа QPainter, задаю параметры рисовальщика (setRenderHint,setPen,setBrush), отрисовыванию свой объект, а как его потом типо стереть я так и не понял.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Можно залить стилем:

QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

Можно залить QPainter'ом. См. fillRect(), brush можно взять из QWidget::palette().

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

моргать не будет? хотя в qt 4.5 чего-то там делали для non-native widgets А то можно было бы наглядно по шагам разобрать пример с анимацией: с заливкой моргает, с двойной буферизацией или OpenGL -- не моргает

anonymous
()
Ответ на: комментарий от DDR

Вот тут выложил http://ifolder.ru/9055435 то что написано, сильно прошу не пинать за кривость и за индетификаторы. Отрисовывать пытаюсь в oventimer,cpp который нагло стырен с учебника.

DDR ★★
() автор топика
Ответ на: комментарий от alex_custov

ui формы там нету, простенькая лаба, а qmake сделать видно не судьба:( Тут же крикун нашел что ему не понравилось, что я весь проект выслал. Ладно спасибо за "помощь", сам разберусь. Топик закрыт.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Ты сам-то набери в своём проекте с ифолдера qmake -project && qmake && make?

С нажатиями мыши не разбирался, просто вставил обновление по таймеру: http://depositfiles.com/files/6dbqkkc2y. И у тебя в paintEvent() память течёт.

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.