crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 2:05