Russian Qt Forum
Сентябрь 30, 2024, 22:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Doen't redrawing  (Прочитано 3937 раз)
gekso
Гость
« : Апрель 26, 2007, 19:03 »

Privet, sorry sorry sorry translit.
Est' problemka, mojet kto znaet reshenie  :roll:
 
Код:


>>>>mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>
#include <QtCore>

class QLabel;
class QPaintEvent;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();
     
    QApplication* q_app;

private slots:

   void go();

private:
    QWidget*  w;
    QLabel*   label;
    QImage    image;

    int temp;
       
protected:
   
    void paintEvent(QPaintEvent*);
};

#endif

>>>> main.cpp

#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
   
    MainWindow* mw = new MainWindow;
    mw->q_app = &app;
   
    MainWindow window;
    window.show();
    return app.exec();
}


>>>> mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow()
{
    w = new QWidget(this);
    setCentralWidget(w);

    QWidget *topFiller = new QWidget;
    topFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QWidget *bottomFiller = new QWidget;
    bottomFiller->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
   
    createActions();
    createMenus();

    setWindowTitle(tr("Main Window"));
    setMinimumSize(160, 160);
    resize(480, 320);
   
    label = new QLabel(w, 0);
    label->setScaledContents(1);
   
    QPushButton* pb = new QPushButton("&Go", this);
    connect(pb, SIGNAL(triggered()), this, SLOT(go()));

    temp = 1;
}

void MainWindow::go()
{
  for(;;) //i have a timer here, not FOR, but it doesn't play, it to big thing to write..
  {
    //w->repaint();

     QPaintEvent event(QRect(0, 0, roi.width, roi.height));
     q_app->sendEvent(this, &event);
  }
}

void MainWindow::paintEvent(QPaintEvent* event)
{
  if(temp == 1)
  {
    printf("r\n");
    label->setPixmap(QPixmap("/users/my/r.bmp"));
  }    
  else if(temp == 2)
  {
    printf("s\n");
    label->setPixmap(QPixmap("/users/my/s.bmp"));
    temp = 0;
  }
 
  temp ++;
 
  q_app->processEvents(QEventLoop::AllEvents);
}



T.e. kak vidno est' knopka. Pri najatii na nee doljno poluchit'sia podobie sladeshow, tol'ko is 2 partinok. Chere SENDEVENT posilaetsia event na repaint, on tyda zahodit, no pererisovki ne  voznikaet. Poka ia ne cliknu drugoe okno k primeru - t.e. eshe raz ne vizovu repaintEvent! Togda da  - pererisovivaet. No vedi is cikla FOR cod ZAHODIT v paintEvent - no ne pererisovivat  Грустный A tak - pererisovivaet.. V chem problema?

On english
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Апрель 26, 2007, 21:37 »

по крайней мере в 3-ке множественные апдейты окна сокращались, чтобы повысить производительность. попробуй вместо sendEvent использовать update() + qApp->processEvents()
Записан
norD655
Гость
« Ответ #2 : Февраль 27, 2008, 23:51 »

У меня при аналогичном способе вывода картинок наблюдается шлейф от окошка, при передвижении. Причем достаточно длинный, что не радует. Кроме того, если выводить по 2 картинки одновременно, то приложение жестоко повисает... Как это можно забороть?

UPD: оказалось, что шлейф появлялся, когда запускал программу на сером фоне (у меня редактор имеет такой фон). Но подвешивание программы, когда вывожу 2 раза картинку наблюдается:
Код:
picture=new QLabel();
picture2=new QLabel();
pixmap->loadFromData(pointer,lenght,"JPG");
update();

paintEvent(QPaintEvent*)
{
     picture->setPixmap(*pixmap);
     picture2->setPixmap(*pixmap);
}
Ощущение, что это происходит из-за того, что в setPixmap передается сам объект QPixmap, а не указатель на него и происходит копирование, что замедляет процесс.
« Последнее редактирование: Февраль 28, 2008, 15:10 от norD655 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.