crossplatform.ru

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


  Ответ в Тормоза при выводе картинок
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
norD655 Дата 2.3.2008, 16:19
 
Цитата(sploid @ 29.2.2008, 9:02) *
norD655, может так попробовать,а не рисовать в паинт ивенте:
picture=new QLabel();
pixmap->loadFromData(pointer,lenght,"JPG");
picture->setPixmap( pixmap );

мне выводить не статичную картинку нужно, она постоянно меняется.
В общем решил проблему. Создал свой класс на базе QLabel и там с помощью пейнтера вывожу картинку=)) без всяких дабл буферов (он внутри пейнтера уже используется):
CODE
//ImageLabel.h
class QPixmap;
class QPaintEvent;
class ImageLabel:public QLabel
{
QPixmap *pixmap;
public:
ImageLabel(QWidget *parent);
void setPixmap(QPixmap* pxmp);
void paintEvent(QPaintEvent *);

};

//ImageLabel.cpp

#include "ImageLabel.h"
ImageLabel::ImageLabel(QWidget *parent):QLabel(parent)
{
pixmap=0;
}
void ImageLabel::setPixmap(QPixmap *pxmp)
{
pixmap=pxmp;
}
void ImageLabel::paintEvent(QPaintEvent *evt)
{
if(pixmap!=0)
{
QPainter mypainter(this);
mypainter.setWindow(this->frameGeometry());
mypainter.drawPixmap(this->frameGeometry(),*pixmap);
}

}


в классе переопределил метод setPixmap, чтобы он принимал не ссылку на объект, а указатель. Кроме того, QLabel вроде бы рисует внутреннюю копию переданного объекта, что замедляет процесс=)
sploid Дата 29.2.2008, 9:02
  norD655, может так попробовать,а не рисовать в паинт ивенте:
picture=new QLabel();
pixmap->loadFromData(pointer,lenght,"JPG");
picture->setPixmap( pixmap );
ViGOur Дата 28.2.2008, 16:14
  Все правильно, при перерисовке, двойная буферизация должна помочь. :)
norD655 Дата 28.2.2008, 16:02
 
Цитата(ViGOur @ 28.2.2008, 15:28) *
Попробуй QPixmapCache.

Есть статья: Optimizing with QPixmapCache

Ок. попробую. заметил такую вещь, что зависает в тот момент, когда изменяется геометрия окна или оно двигается. А если запустить и не трогать, то будет нормально выводить картинки.
UPD: виснет, только когда растягиваю, когда двигаю все нормально
ViGOur Дата 28.2.2008, 15:31
  Вот еще есть статья как этого избежать: Быстро и без мерцаний, смотри Двойная буферизация.
ViGOur Дата 28.2.2008, 15:28
  Попробуй QPixmapCache.

Есть статья: Optimizing with QPixmapCache
norD655 Дата 28.2.2008, 15:06
  Нужно выводить до 4-х картинок одновременно (640х480) на экран. При выводе одной проблем нет, когда пытаюсь отрисовать уже 2 получаю жуткое зависание. Как можно подобную проблему решить?
CODE
picture=new QLabel();
picture2=new QLabel();
pixmap->loadFromData(pointer,lenght,"JPG");
update();

paintEvent(QPaintEvent*)
{
picture->setPixmap(*pixmap);
picture2->setPixmap(*pixmap);
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 21.5.2022, 3:14