![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
zuze |
![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
У меня проблема со стиранием нарисованной картинки в определённой области.
Я рисую прямо на окне: 1. Рисую фон прямоугольный 2. Рисую решётку (с помощью горизонтальных и вертикальной линии) 3. Также рисую картинку по данным из двухмерного массива 4. Также рисую линию Мне надо только картинку удалить которую я нарисовал (пункт 3) Я попробовал использовать
Указав в скобках область в которой будет закрашивать, но закрасилось почти всё и фон и решётка и рисунок. Как мне правильно удалить нарисованный рисунок, но чтобы остальное не удалилось? |
|
|
mezmay |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Мне надо только картинку удалить которую я нарисовал (пункт 3) Если речь идёт об удалении "потом" (при следующем вызове события рисования), то могу предложить такой вариант:1) Всю статику (то что не изменяет или изменяется редко) рисовать вне paintEvent на QImage (или QPixmap). 2) Рисовать "картинку по данным из двухмерного массива" тоже вне paintEvent на QImage (или QPixmap). 3) В paintEvent рисовать ранее созданный QImage со статикой 4) В этом же paintEvent рисовать ранее созданный QImage с "картинкой по данным из двухмерного массива" 5) при обновлении данных перерисовывать QImage с "картинкой по данным из двухмерного массива" (как в п.2) |
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, я ничего не понял, про какую картинку речь ?
|
|
|
zuze |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, не проще таблицу применить ? )
|
|
|
zuze |
![]()
Сообщение
#7
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я решил "3. Также рисую картинку по данным из двухмерного массива" рисовать в место "1. Рисую фон прямоугольный", так как хоть картинка и светлая, но портила вид "2. Рисую решётку (с помощью горизонтальных и вертикальной линии)". Тогда и метод eraseRect() можно воспользоваться.
Вот только пока не понимаю почему, но зрительно видна только последняя (третья) картинка, хотя я задаю вывод трёх картинок с интервалом 10 мс. Может это очень быстро и глаз не успевает заметить? |
|
|
zuze |
![]()
Сообщение
#8
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Сделал таймер на 3 минуты, но к сожалению отображается всё равно последний файл.
Как я это делаю: 1. В Конструкторе
2. Алгоритм MyClick() 2.1 Открытие файла 2.2 Очистка области 2.3 Два цикла для считывания значения из файла и занесения в двухмерный массив, а также рисования каждого значения двухмерного массива с помощью drawPoint 2.4 Зацикливание, то есть переход к следующему 3. В переопределение paintEvent я вызываю MyClick(). Я с помощью qDebug() проверил совпадает ли имена файлов и их порядковое значение, то есть i = 1; fp = 1.dat i = 2; fp = 2.dat i = 3; fp = 3.dat Также проверял каждый файл в отдельности, картинка разная рисуется. Значит дело не в том, что я файлы не правильно считываю. В чём же ещё может быть проблема, что выводится, только картинка из последнего файла?
Так как я делаю
то отображается последняя картинка, но убирание этой строчки кода ситуацию не меняет, вроде это происходит потому, что я рисую всё подряд за один раз. Мог бы кто-нибудь рассказать, что значит сделать не за раз? Сообщение отредактировал zuze - 6.1.2013, 21:34 |
|
|
Алексей1153 |
![]()
Сообщение
#9
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, тебе несколько человек сказали: рисуй в обработчике paintEvent
а ты рисуешь в обработчике таймера время - это сдвиг фазы. В обработчике рисования выводишь картинку для текущей фазы. После этого скорость показа будет зависеть только от тактования |
|
|
zuze |
![]()
Сообщение
#10
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Алексей1153, я понял надо было сделать так:
1. В Конструкторе
2. Описание MyTimer()
3. Функция MyClick() осталась прежней. 4. В методе paintEvent() вписываю MyClick(); Всё равно появляется только последний файл. Почему? Сообщение отредактировал zuze - 8.1.2013, 16:27 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 9.5.2025, 12:48 |