Тормоза при выводе картинок |
Здравствуйте, гость ( Вход | Регистрация )
Тормоза при выводе картинок |
norD655 |
28.2.2008, 15:06
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 28.2.2008 Пользователь №: 108 Спасибо сказали: 0 раз(а) Репутация: 0 |
Нужно выводить до 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); } |
|
|
ViGOur |
28.2.2008, 15:28
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
ViGOur |
28.2.2008, 15:31
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Вот еще есть статья как этого избежать: Быстро и без мерцаний, смотри Двойная буферизация.
|
|
|
norD655 |
28.2.2008, 16:02
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 28.2.2008 Пользователь №: 108 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ок. попробую. заметил такую вещь, что зависает в тот момент, когда изменяется геометрия окна или оно двигается. А если запустить и не трогать, то будет нормально выводить картинки. UPD: виснет, только когда растягиваю, когда двигаю все нормально Сообщение отредактировал norD655 - 28.2.2008, 16:07 |
|
|
ViGOur |
28.2.2008, 16:14
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Все правильно, при перерисовке, двойная буферизация должна помочь.
|
|
|
sploid |
29.2.2008, 9:02
Сообщение
#6
|
Студент Группа: Участник Сообщений: 51 Регистрация: 26.2.2008 Из: Москва Пользователь №: 106 Спасибо сказали: 10 раз(а) Репутация: 1 |
norD655, может так попробовать,а не рисовать в паинт ивенте:
|
|
|
norD655 |
2.3.2008, 16:19
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 28.2.2008 Пользователь №: 108 Спасибо сказали: 0 раз(а) Репутация: 0 |
norD655, может так попробовать,а не рисовать в паинт ивенте:
мне выводить не статичную картинку нужно, она постоянно меняется. В общем решил проблему. Создал свой класс на базе 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 вроде бы рисует внутреннюю копию переданного объекта, что замедляет процесс=) |
|
|
Текстовая версия | Сейчас: 28.1.2025, 7:32 |