Здравствуйте, гость ( Вход | Регистрация )
norD655 | Дата 2.3.2008, 16:19 |
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 вроде бы рисует внутреннюю копию переданного объекта, что замедляет процесс=) |
|
sploid | Дата 29.2.2008, 9:02 |
norD655, может так попробовать,а не рисовать в паинт ивенте:
|
|
ViGOur | Дата 28.2.2008, 16:14 |
Все правильно, при перерисовке, двойная буферизация должна помочь. | |
norD655 | Дата 28.2.2008, 16:02 |
Ок. попробую. заметил такую вещь, что зависает в тот момент, когда изменяется геометрия окна или оно двигается. А если запустить и не трогать, то будет нормально выводить картинки. 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); } |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 21:36 |