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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тонкости использования ArthurFrame. Что-же не так?  (Прочитано 3396 раз)
Anatoliy
Гость
« : Апрель 09, 2007, 20:15 »

Всем привет!

Недавно начал использовать ArthurFrame! Классная вещь- качественная прорисовка без мерцаний и несильно нагружает проц.

Но руки оказались недостаточно прямыми :oops:

1.

Код:


class Renderer : public ArthurFrame {

    QBasicTimer timer;
    void paint(QPainter* painter){/* ...something... */}
    void timerEvent(QTimerEvent* e){repaint();}
    // something else...
};

class MyWidget : public QWidget {

     Renderer* myRenderer;

// something else...

};
// остальное непринципиально



Это в точности такое использование, как в примерах Qt. Естесвенно, все получается нормально.

Но попробовав организовать чуть-чуть по другому:

2.

Код:


class Renderer : public ArthurFrame {

    void paint(QPainter* painter){/* ...something...*/}
    // something else...
};

class MyWidget : public QWidget {

     Renderer* myRenderer;

public:

     void paintQuickly(){myRenderer->repaint();}

// something else....
};

class MyThread : public QThread {

    MyWidget* widget;

    void run(){

        while(true){

              widget->repaintQuickly();
              msleep(100);
        }
    }
};



И вот во втором случае все очень плохо, фрейм перерисовывается с сильными подергиваниями, причем дергается весь фрейм(окно верхнего уровня) вместе с заголовком, хотя ему вроде бы и не приказывали перерисовываться. Да и чем отличается второй вариант от первого? Не вижу разницы... :cry:  :cry:  :cry:

Но ведь она должна быть! Видимо где-то очень тривиальный момент, который я упустил.... Помогите, кто может...
Записан
goer
Гость
« Ответ #1 : Апрель 09, 2007, 20:27 »

Assistant:
Цитировать

Note that QCoreApplication::exec() must always be called from the main thread (the thread that executes main()), not from a QThread. In GUI applications, the main thread is also called the GUI thread because it's the only thread that is allowed to perform GUI-related operations.


Если MyWidget создан(или живет) в не гуевом потоке то никто не дает гарнтий что виджет будет отображаться вообще. Все гуевые классы должны создаваться и жить только в гуевом потоке!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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