crossplatform.ru

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


  Ответ в тормоза QGraphicsView
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 11.11.2010, 12:16
  возможно, отключен трекинг. Попробуй включить
setMouseTracking()

Отстальных условий работы твоей программы знать не могу :)
Tigr Дата 11.11.2010, 11:45
  Тема с таймером хорошая. Однако, мне покоя не дает: почему событие mouseMoveEvent происходит только после полной остановки мыши?
Алексей1153 Дата 11.11.2010, 9:46
  а где именно "3-4 раза в секунду" происходит ?

Ну, по крайней мере, в mouseMoveEvent так делать нельзя. Сообщений движения мыши генерируется очень много, а для глаза так часто перерисовывать нет смысла. Зато для процессора это нагрузка - вот и тормоза.

Навскидку (если, конечно, у QGraphicsView нет специальных методов - я им не пользовался, не знаю) можно сделать следующее:
1) завести флажок
bool m_bNeedRedraw;
который устанавливать по любому сообщению движения мыши в режиме MoveMap
2) по таймеру в 50...150 мс проверять состояние флажка и перерисовывать сцену, если надо
Tigr Дата 11.11.2010, 9:44
  Заметил одну фишку: прорисовка происходит, когда мышь остановится. если бесконечно двигать, то прорисовки нет. Отсюда тормоза! Таким образом, задача свелась к тому, как заставить рисовать во время движения мыши?
Tigr Дата 11.11.2010, 9:37
 
Цитата(Алексей1153 @ 11.11.2010, 9:29) *
а код то покажи, как ты это делаешь

про какой рисунок речь - какое-то изображение или вся сцена ?

CODE


void map_panel::mouseMoveEvent(QMouseEvent *event)
{
if ((mode_mouse == MoveMap) )
{
p_map.x=p_map.x-(event->pos().x()-mousePos.x);
p_map.y=p_map.y-(event->pos().y()-mousePos.y);
mousePos.x = event->pos().x();
mousePos.y = event->pos().y();
draw_map(zoom,&p_map);//функция прорисовки
};
}


bool map_panel::draw_map(unsigned int zoom,PointCoordMap* p)
{
this->scene()->clear();
x1=this->width();
y1=this->height();
this->setSceneRect(p->x,p->y,p->x+x1,p->y+y1);
this->centerOn(p->x+x1/2,p->y+y1/2);
...
QPixmap pieceImage;
file_list.resize(mtom_n->size_f);
fp=fopen(mtom_n->FileName.toAscii(),"r+b");
fseek(fp,mtom_n->addr-1,SEEK_SET);
fread(file_list.data(),mtom_n->size_f,1,fp);
pieceImage.loadFromData(file_list);
QGraphicsPixmapItem* item = this->scene()->addPixmap(pieceImage);
item->setPos(i*256, j*256);
fclose(fp);
...
Алексей1153 Дата 11.11.2010, 9:29
  а код то покажи, как ты это делаешь

про какой рисунок речь - какое-то изображение или вся сцена ?
Tigr Дата 11.11.2010, 9:20
  Имеются моменты, когда рисунок сцены меняется 3-4 раза в секунду. Однако наблюдаются конкретные тормоза. Это как-нибудь можно преодолеть?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 17:58