Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: finny от Сентябрь 07, 2011, 23:58



Название: Ускорить отрисовку qtextedit
Отправлено: finny от Сентябрь 07, 2011, 23:58
Проблема заключается в следующем: в окне QMainWindow границы изменяются при помощи сплиттера. В правом сплиттере расположен qtextedit, отображающий форматированную (html) текстовую информацию. При огромных объёмах текста (~250 кб) изменение границ сплиттера осуществляется крайне медленно в силу тормозов прорисовки qtextedit. Можно ли как-нибудь кардинально ускорить перерисовку qtextedit при изменениях его размеров частности. Может быть, можно как-нибудь использовать аппаратное успорение или opengl? HELP!!!


Название: Re: Ускорить отрисовку qtextedit
Отправлено: GreatSnake от Сентябрь 08, 2011, 11:15
Проблема заключается в следующем: в окне QMainWindow границы изменяются при помощи сплиттера. В правом сплиттере расположен qtextedit, отображающий форматированную (html) текстовую информацию. При огромных объёмах текста (~250 кб) изменение границ сплиттера осуществляется крайне медленно в силу тормозов прорисовки qtextedit. Можно ли как-нибудь кардинально ускорить перерисовку qtextedit при изменениях его размеров частности. Может быть, можно как-нибудь использовать аппаратное успорение или opengl? HELP!!!
Интересно, какое ускорение, кроме мощного CPU, ускорит пере-форматирование?
Вообще-то при таких ситуациях используют таймеры.
Перегрузите QTextEdit::resizeEvent() и в нём заряжайте таймер, после отработки которого уже вызывайте базовый resizeEvent().


Название: Re: Ускорить отрисовку qtextedit
Отправлено: finny от Сентябрь 09, 2011, 18:26
Можно более подробно объяснить? И каким образом это коррелируется с paint event? Если несложно то по шагам и даже можно какой-нибудь псевдокод. Буду очень признателен.


Название: Re: Ускорить отрисовку qtextedit
Отправлено: GreatSnake от Сентябрь 09, 2011, 22:46
И каким образом это коррелируется с paint event?
Никаким, т.к. вся проблема не в отрисовке, а в форматировании.

Цитировать
Если несложно то по шагам и даже можно какой-нибудь псевдокод.
Как-то так:
Код
C++ (Qt)
class TextEdit : public QTextEdit
{
Q_OBJECT
public:
   TextEdit( QWidget* parent = 0 )
   : QTextEdit( parent )
   {
         resize_timer_.setInterval( 50 );
         resize_timer_.setSingleShot( true );
         connect( resize_timer_, SIGNAL( timeout() ), this, SLOT( delayed_resize() ) );
   }
   virtual ~TextEdit() {}
 
protected slots:
   void delayed_resize()
   {
         QTextEdit::resizeEvent( &QResizeEvent( size(), old_size_ ) );
   }
 
protected:
    void resizeEvent( QResizeEvent* e )
    {
         if( !resize_timer_.isActive() )
           old_size_ = e->oldSize();
         resize_timer_.start();
    }
 
private:
   QTimer   resize_timer_;
   QSize    old_size_;
};


Название: Re: Ускорить отрисовку qtextedit
Отправлено: finny от Сентябрь 10, 2011, 09:16
И последний вопрос: обязательно ли для этого делать наследник класса или можно перехватить resizeEvent для qtextedit в eventFilter?


Название: Re: Ускорить отрисовку qtextedit
Отправлено: GreatSnake от Сентябрь 10, 2011, 10:52
И последний вопрос: обязательно ли для этого делать наследник класса или можно перехватить resizeEvent для qtextedit в eventFilter?
Это уж как хочется. Только с фильтром, имхо, по-сложнее будет да и не так красиво :)


Название: Re: Ускорить отрисовку qtextedit
Отправлено: finny от Сентябрь 10, 2011, 11:54
Код:
void delayed_resize()
    {
          QTextEdit::resizeEvent( &QResizeEvent( size(), old_size_ ) );
    }

Вот откуда берётся size()?


Название: Re: Ускорить отрисовку qtextedit
Отправлено: GreatSnake от Сентябрь 10, 2011, 12:05
Вот откуда берётся size()?
Код
C++ (Qt)
QSize QWidget::size() const


Название: Re: Ускорить отрисовку qtextedit
Отправлено: finny от Сентябрь 10, 2011, 12:18
Я так и думал. А вот какой интервал для таймера будет оптимальным?
Кстати заметил ещё одну вещь: чем больше значение вертикального скролла(от 0 до 100), тем медленнее происходит update интерфейса. То есть если ползунок наверху то всё летает, а если внизу то значительно медленнее


Название: Re: Ускорить отрисовку qtextedit
Отправлено: _OLEGator_ от Октябрь 05, 2011, 15:20
как вариант, можно попробовать использовать QWebView вместо QTextEdit, если не требуется редактирование.
Должно работать быстрее.


Название: Re: Ускорить отрисовку qtextedit
Отправлено: artiom_kh от Октябрь 11, 2011, 10:09
как вариант, можно попробовать использовать QWebView вместо QTextEdit, если не требуется редактирование.
Должно работать быстрее.
вообщем-то да, там движок от Google Chrome, правда не последних версий


Название: Re: Ускорить отрисовку qtextedit
Отправлено: Авварон от Октябрь 11, 2011, 10:52
http://doc.qt.nokia.com/latest/qsplitter.html#opaqueResize-prop

Кажется оно, непонятно почему написано что вкл по дефолту.