crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 5 > »   
Ответить в данную темуНачать новую тему
> Как очистить то, что нарисовал с помощью QPainter
zuze
  опции профиля:
сообщение 16.1.2013, 18:31
Сообщение #21


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 16.1.2013, 17:50) Link
1) Qpainer - что за класс ?


Это я ошибся при наборе должно быть QPainter.

Цитата(Алексей1153 @ 16.1.2013, 17:50) Link
2) доходит ли выполнение до этого места ? (p.eraseRect(50, 50, 720, 492)


Конечно, так как MyDraw(); выполняется, а если не доверять этой функции, то можно написать qDebug() << "test"; и это слово выводиться значит доходит.

Цитата(Алексей1153 @ 16.1.2013, 17:50) Link
3) и что делает MyDraw ?


Рисует картинку по значениям из двухмерного массива.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.1.2013, 19:04
Сообщение #22


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


zuze,

1) а энтот MyDraw у тебя точно только отсюда вызван ?
2) почему в эту функцию не передал p ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 16.1.2013, 19:17
Сообщение #23


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 16.1.2013, 19:04) Link
1) а энтот MyDraw у тебя точно только отсюда вызван ?


Да, только здесь вызывается.

Цитата(Алексей1153 @ 16.1.2013, 19:04) Link
2) почему в эту функцию не передал p ?


Так как там свой элемент класса QPainter.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.1.2013, 19:21
Сообщение #24


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну это точно ошибка, не должно быть двух паинтеров. Рисуется на одном же!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 17.1.2013, 7:33
Сообщение #25


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 16.1.2013, 19:21) Link
ну это точно ошибка, не должно быть двух паинтеров. Рисуется на одном же!


А почему? Рисую область чёрную с помощью одного элемент класса QPainter, а картинки рисую с помощью другого элемент класса QPainter. Чёрная область отображается и картинки отображаются тоже, Только перед рисованием картинок чёрная область не стирается, как я понял не перерисовывается почему-то. Пробовал после стирание сразу update() делать не помогло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.1.2013, 7:36
Сообщение #26


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


передай указатель в функцию и рисуй на нём, что тут спорить то )))

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 17.1.2013, 9:25
Сообщение #27


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 17.1.2013, 7:36) Link
передай указатель в функцию и рисуй на нём, что тут спорить то )))


Сделал.
Теперь вызов функции такой:
MyDraw(&p);


А в нутри функции я всё равно не могу очистить перед рисованием картинки, делаю так:
t->eraseRect(50, 50, 720, 492);


Значит ни в этом дело. Что же ещё может быть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.1.2013, 10:36
Сообщение #28


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


1) код MyDraw покажи. Что за t ?
2) что ты там очищаешь, я так и не могу понять, если честно. Рисуй картинку и всё ))

приложи уже проект, что ли
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 18.1.2013, 12:48
Сообщение #29


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я сделал так. Создал новый проект в котором одна вертикальная линия двигается через 3 секунды по своему таймеру. а другая линия двигается через 5 секунд по своему таймеру. Тут всё работало идеально. Тогда я закомментировал код в функции рисования и функции-слот таймера и вставил туда код рисования одной из этих двух линий (не важно какой). Всё прекрасно заработало. Так я понял, что подвисание таймера линии были из-за того что в функции-слот таймера были слишком много циклов или что было много циклов в функции-слот таймера и в функции рисования.

Если я могу убрать циклы из функции рисования через Qpixmap, то как убрать циклы при заполнении массива в функции-слоте?

Ниже код, где идёт цикличное заполнение массива.

for (int j = 0; j < 720; j++)
{
     for (int i = 0; i < 492; i++)
     {
         rc = getc(fp);
         buffer[i][j] = rc;
     }
}


Использованные переменные имеют типы:

int rc;
int buffer[492][720];
FILE *fp;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.1.2013, 14:15
Сообщение #30


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


считай всё одним махом, а не по байтику

ещё можно проекцией файла воспользоваться:

QFile file("d:/1.bin");
if(!file.open(QFile::ReadOnly))return false;

uint8_t* pFileBeg=file.map(0,file.size());
if(!pFileBeg)return false;

file.close();

typedef int td_element;//тип элемента массива

uint32_t count=file.size()/sizeof(td_element);
std::vector<td_element> buffer
(
((td_element*)pFileBeg)
,((td_element*)pFileBeg) + count
);



не компилировал )

ещё - можно один раз загрузить из файла, зачем это каждый раз делать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  < 1 2 3 4 5 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 7.1.2026, 15:14