![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
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
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, я ничего не понял, про какую картинку речь ?
|
|
|
zuze |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 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
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 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 |
|
|
Алексей1153 |
![]()
Сообщение
#11
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
так ты фазу не смотришь, бацаешь всё в цикле while (KolAllFile != -1)
кстати, необязательно делать паинтер на куче QPainter *Tochka = new QPainter(this); можешь на стеке QPainter Tochka(this); так как в каждой итерации цикла это будет новая переменная. И цикла, вообще говоря, не будет, когда станешь фазу учитывать - рисование произойдёт один раз |
|
|
zuze |
![]()
Сообщение
#12
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я пытался сделать так
В конструкторе
В paintEvent() я добавил
В результате рисуется вся область самым нижним цветом (у меня он серый) и через какое-то время зависает. Выскакивает окно с тремя кнопками вторая кнопка "Закрыть", третья "Отладить". Я нажимаю закрыть и появляется ошибка: Завершение с кодом -1073741819. А должны выводится которые меняются в данном случае через три секунды. Что же я делаю не так? Сообщение отредактировал zuze - 11.1.2013, 10:01 |
|
|
zuze |
![]()
Сообщение
#13
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Избавился от ошибки переместив
В конструктор. Но результат рисуется такой же, вся область самым нижним цветом (у меня он серый). Сообщение отредактировал zuze - 11.1.2013, 10:57 |
|
|
Алексей1153 |
![]()
Сообщение
#14
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
у тебя в голове каша ))
давай попробуем иначе: 1) создай новый проект и напиши программу, где есть один диалог. Когда по окну диалога щёлкают, пусть он закрасится одним цветом, когда ещё раз - другим. Пусть всего 3 цвета. Закрашивай в paintEvent (непосредственно там, без всяких перевызовов!) 2) дополнительно - почитай про std::vector, и замени свои глобальные массивы хотя бы им |
|
|
zuze |
![]()
Сообщение
#15
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос решён. Дело было в том, что я не учёл '\0' в именах файлов.
Писал так:
а надо было так:
|
|
|
Алексей1153 |
![]()
Сообщение
#16
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, но ты же понимаешь, что так дела не делаются. Храни в одном из текстовых форматов лучше - столько проблем автоматом отпадут, ты бы только знал )
Я это всё давно прошёл |
|
|
zuze |
![]()
Сообщение
#17
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Алексей1153, большое спасибо за помощь. К сожалению от вида файлов которые мне даны отказаться нельзя, так как даны мне для использования и ни кто переделывать их не будет.
|
|
|
Алексей1153 |
![]()
Сообщение
#18
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, сделай конвертер и перегоняй в нужный вид. С ним и работай
|
|
|
zuze |
![]()
Сообщение
#19
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Почему я не могу стереть то, что рисовалось с помощью Qpainer?
Этот код описан в переопределении paintEvent(). Не выполняется
|
|
|
Алексей1153 |
![]()
Сообщение
#20
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
1) Qpainer - что за класс ?
2) доходит ли выполнение до этого места ? (p.eraseRect(50, 50, 720, 492) 3) и что делает MyDraw ? Сообщение отредактировал Алексей1153 - 16.1.2013, 17:52 |
|
|
zuze |
![]()
Сообщение
#21
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
1) Qpainer - что за класс ? Это я ошибся при наборе должно быть QPainter. 2) доходит ли выполнение до этого места ? (p.eraseRect(50, 50, 720, 492) Конечно, так как MyDraw(); выполняется, а если не доверять этой функции, то можно написать qDebug() << "test"; и это слово выводиться значит доходит. 3) и что делает MyDraw ? Рисует картинку по значениям из двухмерного массива. |
|
|
Алексей1153 |
![]()
Сообщение
#22
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze,
1) а энтот MyDraw у тебя точно только отсюда вызван ? 2) почему в эту функцию не передал p ? |
|
|
zuze |
![]()
Сообщение
#23
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#24
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
ну это точно ошибка, не должно быть двух паинтеров. Рисуется на одном же!
|
|
|
zuze |
![]()
Сообщение
#25
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ну это точно ошибка, не должно быть двух паинтеров. Рисуется на одном же! А почему? Рисую область чёрную с помощью одного элемент класса QPainter, а картинки рисую с помощью другого элемент класса QPainter. Чёрная область отображается и картинки отображаются тоже, Только перед рисованием картинок чёрная область не стирается, как я понял не перерисовывается почему-то. Пробовал после стирание сразу update() делать не помогло. |
|
|
Алексей1153 |
![]()
Сообщение
#26
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
передай указатель в функцию и рисуй на нём, что тут спорить то )))
|
|
|
zuze |
![]()
Сообщение
#27
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
передай указатель в функцию и рисуй на нём, что тут спорить то ))) Сделал. Теперь вызов функции такой:
А в нутри функции я всё равно не могу очистить перед рисованием картинки, делаю так:
Значит ни в этом дело. Что же ещё может быть? |
|
|
Алексей1153 |
![]()
Сообщение
#28
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
1) код MyDraw покажи. Что за t ?
2) что ты там очищаешь, я так и не могу понять, если честно. Рисуй картинку и всё )) приложи уже проект, что ли |
|
|
zuze |
![]()
Сообщение
#29
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я сделал так. Создал новый проект в котором одна вертикальная линия двигается через 3 секунды по своему таймеру. а другая линия двигается через 5 секунд по своему таймеру. Тут всё работало идеально. Тогда я закомментировал код в функции рисования и функции-слот таймера и вставил туда код рисования одной из этих двух линий (не важно какой). Всё прекрасно заработало. Так я понял, что подвисание таймера линии были из-за того что в функции-слот таймера были слишком много циклов или что было много циклов в функции-слот таймера и в функции рисования.
Если я могу убрать циклы из функции рисования через Qpixmap, то как убрать циклы при заполнении массива в функции-слоте? Ниже код, где идёт цикличное заполнение массива.
Использованные переменные имеют типы:
|
|
|
Алексей1153 |
![]()
Сообщение
#30
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
считай всё одним махом, а не по байтику
ещё можно проекцией файла воспользоваться:
не компилировал ) ещё - можно один раз загрузить из файла, зачем это каждый раз делать ? |
|
|
zuze |
![]()
Сообщение
#31
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ещё - можно один раз загрузить из файла, зачем это каждый раз делать ? Так как у меня целая куча файлов, а не один и каждый должен через определённый промежуток времении появлятся. Я попытался сделать так:
Но на третье значение уже коряво выводиться. Я посмотрел оно равно EC, что соответствует русской букве 'М' и с другими русскими буквами ошибки. В результате помимо, что часть значений выводиться не правильно, так в место всего файла выводиться только 11 знаков. Как я понял метод "readAll().data()" не работает с кириллицей. Что же делать, что бы весь файл у меня за раз считывался? |
|
|
zuze |
![]()
Сообщение
#32
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Как я понял "readAll().data()" выводит значения в дополнительном коде, а надо мне перевести в прямой код, тем более почему выводиться только 11 символов? Не смотрите, что у меня цикл до 11, так как я увиличевыал на сотню больше или вообще убирал цикл. Всё равно 11 символов.
Я думал перевод из дополнительного кода в прямой код, делается так: В место
Написал так
Это не помогло, правильные значения стали отрицательными, а у неправильных значений убрался только отрицательный знак. Может "readAll().data()" значение не в дополнительном коде из файла берёт, тогда в каком коде? Сообщение отредактировал zuze - 21.1.2013, 10:17 |
|
|
Алексей1153 |
![]()
Сообщение
#33
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze,
1) много файлов- кеш в помощь. Или маппинг 2) у тебя явно ошибка тут (по крайней мере очень не советую так делать):
тут ты делаешь вот что: объект QByteArray создаётся на стеке без имени, с него вытаскивается указатель на начало. А дальше - фиг знает, что будет делай копию QByteArray ba= fp.readAll().data(); 3) методу глубоко пофиг, кириллица там или юникод. Он скопирует БАЙТЫ ![]() |
|
|
zuze |
![]()
Сообщение
#34
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я сделал так, значения стали выводится в нужном количестве:
Но вот значения когда я в место
Делаю
или
или
Значение EC, что соответствует русской букве 'М', выводиться как -20, а должно 236 и такие отрицательные значения, только появляются, когда появляется кириллица. Как это поправить? Сообщение отредактировал zuze - 22.1.2013, 8:26 |
|
|
Алексей1153 |
![]()
Сообщение
#35
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
лучше так
причём, за счёт того, что это std::string, ноль на конце учтётся автоматом (он там всегда есть) для юникода юзай std::wstring, только учитывай, что тут элемент - 2 байта насчёт знака - ну так int знаковый. Сделай так qDebug() << (uint32_t)temp[i]; Сообщение отредактировал Алексей1153 - 22.1.2013, 8:29 |
|
|
zuze |
![]()
Сообщение
#36
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
zuze |
![]()
Сообщение
#37
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
То что я сделал - это не помогло.
Я проверял так: 1. Рисую один файл. Торможения таймера линии есть. 2. Рисую область одним цветом. Торможения таймера линии стало меньше в три раза. 3. Рисую область используя метод DrawRect() при этом убираю циклы. Таймер линии нормально идёт. Как я понял, что надо использовать потоки и их синхронизировать, правда не совсем понимаю, как это сделать? |
|
|
Алексей1153 |
![]()
Сообщение
#38
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
давно тебе говорю уже - прицепи проект
|
|
|
zuze |
![]()
Сообщение
#39
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Алексей1153, а есть функция которая за раз рисует по значениям из двухмерного массива?
|
|
|
Алексей1153 |
![]()
Сообщение
#40
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
конечно есть - drawImage
|
|
|
zuze |
![]()
Сообщение
#41
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#42
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
можно прицепить QImage к QPainter и нарисовать на нём пикселы один раз. А потом при рисовании - выводить картинку разом
Сообщение отредактировал Алексей1153 - 22.1.2013, 20:07 |
|
|
zuze |
![]()
Сообщение
#43
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#44
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
если данные у тебя были сохранены в формате, который понимает класс, то можно. Иначе - только вручную
|
|
|
zuze |
![]()
Сообщение
#45
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#46
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
например так
ещё можно рисовать на QPixmap
|
|
|
zuze |
![]()
Сообщение
#47
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Если использую QPixmap всё равно один раз надо его циклично задать, если QImage тоже самое. Не ужели тут единственный вариант это создание потока?
|
|
|
Алексей1153 |
![]()
Сообщение
#48
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
а в чём проблема один раз долго создавать картинку, а потом миллион раз быстро её показывать ? ))
|
|
|
zuze |
![]()
Сообщение
#49
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а в чём проблема один раз долго создавать картинку, а потом миллион раз быстро её показывать ? )) У меня не одна картинка, а около 1000 и я через определённое время меняю. Я сделал так: Глобальная переменная
Часть кода из функции-слот таймера
А в paintEvent() рисую так:
Скорость линии падает, но не так сильно, то есть допустим без картинок линия оборот совершает за 3 секунды, а с картинками за 6 секунд. Это всё равно не правильно, но уже лучше. А мне надо, что бы с картинками и без них линия делала оборот за 3 секунды, что ещё можно придумать? |
|
|
Алексей1153 |
![]()
Сообщение
#50
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
поставлю вопрос немного по-другому:
а в чём проблема один раз долго создавать 1000 картинок, а потом миллион раз быстро их показывать ? к тому же - необязательно сразу это делать, можно по мере необходимости создавать картинку при первом доступе к ней Глобальная переменная не канает. Делай мембер
где QString -например, путь к файлу |
|
|
zuze |
![]()
Сообщение
#51
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Может быть в место setPixel() из класса QImage использовать метод из класса QImageReader. Правда я пока не понял, как там загонять двухмерный массив и как его отображать. Если кто знает скажите?
Сообщение отредактировал zuze - 23.1.2013, 15:13 |
|
|
Алексей1153 |
![]()
Сообщение
#52
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
zuze, всё уже сказано.
|
|
|
zuze |
![]()
Сообщение
#53
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А если метод у класса "QImage", который был бы аналогом метода "setPixel", но что бы заполнялся за раз.
То есть что бы не так:
А мне надо что бы можно без циклов выполнить "setPixel", но я не знаю как это сделать? |
|
|
Алексей1153 |
![]()
Сообщение
#54
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
QImage fromData ( const uchar * data, int size, const char * format = 0 )
QImage fromData ( const QByteArray & data, const char * format = 0 ) но массивы сначала надо подготовить соответственно |
|
|
zuze |
![]()
Сообщение
#55
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#56
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
1) чем двух, трёх и N-мерный массив отличается от одномерного ?
2) переделать - очень быстрая операция 3) будет рисовать всё в одну линию - с чего вдруг ? вот с указанием размеров картинки QImage::QImage ( const uchar * data, int width, int height, int bytesPerLine, Format format ) |
|
|
zuze |
![]()
Сообщение
#57
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я решил задачу. Я решил проверить правильно ли я сделал таймер линии, так как за таймер картинок я был спокоен и оказалось, что таймер линии вообще не правильно был занят. Дело в том, что промежуток на которое должна перемещаться линия (был описан в paintEvent()) и время таймера была заданна не верно. Это произошло из-за того, что таймер линии был сделан давно. Всем большое спасибо за помощь!
Сообщение отредактировал zuze - 25.1.2013, 13:04 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 4.7.2025, 8:38 |