ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: QT4 и TionPro v2  (Прочитано 7225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Yuri

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 9
QT4 и TionPro v2
« : 14 Мая, 2010, 00:44:29 »


 Здравствуйте,

 Столкнулся с проблемой "заторможенности" довольно простого QT приложения на TionPro v2 rev3 при использовании последних версий библиотек QT (пробовал 4.3.3 и 4.6.2).

 QT приложение, о котором идёт речь (см. код в атачменте):

1) рисует четыре кнопки pushButton_1/2/3/4 с надписями; при нажатии на кнопку должно изменять цвет надписи на ней и восстанавливать цвет надписи кнопки, которая была нажата до данной (типа подсвечивается последняя нажатая кнопка). Для манипуляций с цветом подключаю слоты создаваемого приложением наследника QObject к сигналам кнопок (например, pressed()) и в слотах использую QPushButton::setPalette().

2) кроме того в приложении есть пятая кнопка, idleButton, при нажатии на которую во весь экран должна рисоваться картинка (типа заставка), которая должна пропадать при нажатии на неё. QSplashScreen не использую (т.к. поверх картинки должна быть часто меняющаяся надпись [текущее время] - и постоянные QSplashScreen::message() совсем уж сильно загружают процессор - т.к. они, как я понимаю, приводят к перерисовке всей картинки), а рисую картинку в QLabel с помощью setPixmap() и рисую поверх прозрачную кнопку, picButton, на весь экран, сигнал с которой подключен к слоту делающему hide() для QLabel и этой большой кнопки.


 Проблема заключается:

 в случае (1): в визуально заметной (и от того довольно неприятной) задержке при изменении цвета надписи нажимаемой кнопки pushButton_i [задержка где-то в несколько сотен миллисекунд],

 в случае (2): в задержке прежде чем начинает рисоваться картинка после нажатия на кнопку idleButton, а также прежде чем картинка спрячется после нажатия на picButton [задержки до секунды (!) с небольшим].

 При этом, если соответствующим образом адаптированное приложение я запускаю с QT-2.3.10, собранной из crater дистрибутива (т.е. с наложением всех циррусовских патчей), - всё работает просто идеально, без каких бы то ни было визуально заметных задержек!

 Собственно вопросы:

1) имелся ли у кого-нибудь успешный опыт по использованию QT-4-based приложений на ТионПро-v2? Может, я в своём приложении (см. атачмент) просто что-то криминальное нечаянно делаю :\

2) есть ли смысл ожидать исчезновения обозначенных проблем в случае использования Тион-а с PXA270? Там по идее частота CPU 400MHz+ против 200MHz EP9315, да и кэш вдвое больше; кроме того, может frame-buffer драйвер какой-то более продвинутый (pxa270 порт вроде бы в mainstream, в отличии от ep9315)..

3) что есть всё же причина такого существенного отличия "откликаемости" приложения при использовании QT-4 и QT-2? Повышенные требования QT-4 к
аппаратуре или тот факт, что для QT-2 циррус сделал те самые патчи из кратера (см. [1]) и что в результате них с QT-2 используется специализированный дисплейный драйвер библиотеки (QWS_DISPLAY=EP93xx:/dev/fb0), а с QT-4, для которой никакого патча циррус не делал, - стандартный (QWS_DISPLAY=linuxfb:/dev/fb0)? Может, кто-нибудь пробовал адаптировать qt-related патчи из кратера под QT-4 или в этом, в плане производительности, - нет смысла ?

---

[1] патчи из кратер для QT-2.3.10:
 http://arm.cirrus.com/files/index.php?path=linux%2Freleases%2Flinux-2.6%2F1.0.3%2Flinux-crater_1-0-3%2Fpackages%2Fqt/
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: QT4 и TionPro v2
« Ответ #1 : 14 Мая, 2010, 16:37:36 »

В qt2 у вас кнопки были без градиента, а в qt4 кнопки с градиентом во весь экран. К тому же экран 800x600.

Записан

Yuri

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 9
Re: QT4 и TionPro v2
« Ответ #2 : 15 Мая, 2010, 00:40:36 »

В qt2 у вас кнопки были без градиента, а в qt4 кнопки с градиентом во весь экран. К тому же экран 800x600.

 Я думаю градиент здесь ни при чём:

1) если я не вставляю в слот-обработчик события pressed() от кнопки изменение цвета её текста, то никаких визуально заметных задержек при нажатии на кнопку - нет (собственно, если цвет менять в clicked(), то по ощущениям точно такая же задержка, только внешне выглядит иначе: кнопка нажимается, отпускается и только спустя упомянутые сотни миллисекунд меняется цвет текста этой кнопки);
2) пробовал рисовать кнопки одноцветными => всё равно задержка при изменении цвета есть, по ощущениям - такая же;
3) я сомневаюсь, что градиент рассчитывается каждый раз при отрисовки кнопки - мне кажется логично предположить, что это есть что-то статическое, вычисляемое только раз при создании объекта.

 Кроме того, ведь аналогичная задержка наблюдается и при отрисовки картинки (картинка на весь экран). А при эксперименте с QT-2 картинку я рисую ту же самую и никаких задержек не наблюдаю. Экран при этом, конечно, был тоже такой же: 800x600.

 Так что, видимо, дело в чём-то другом ..
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: QT4 и TionPro v2
« Ответ #3 : 15 Мая, 2010, 11:03:06 »

> Я думаю градиент здесь ни при чём:

Ещё как причём -- даже если вы проводите курсором (мыши) над большой кнопкой, она перерисовывается с эффектом подстветки и курсор замирает на примерно тоже самое хорошо заметное время -- доли секунды. Но я не знаю можно ли по простому в Qt4 убрать стили/декорации или это уже и есть минимум.

> мне кажется логично предположить, что это есть что-то статическое, вычисляемое только раз при создании объекта

Гадать можно, а можно посмотреть в исходниках Qt.

> А при эксперименте с QT-2 картинку я рисую ту же самую и никаких задержек не наблюдаю.

Картинку дайте?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: QT4 и TionPro v2
« Ответ #4 : 17 Мая, 2010, 21:01:52 »

Сравните смену цвета надписи, если сделать в main() так:
QApplication::setStyle(QStyleFactory::create("Windows"));
Записан

Yuri

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 9
Re: QT4 и TionPro v2
« Ответ #5 : 18 Мая, 2010, 00:23:15 »

Сравните смену цвета надписи, если сделать в main() так:
QApplication::setStyle(QStyleFactory::create("Windows"));

: ) хм. реально помогло : ) спасибо !!!

теперь без задержек (по-крайней мере, по ощущениям - не дольше чем с QT-2) отображаются как изменения цвета текста кнопки при нажатии на неё, так и отрисовка полноэкранной картинки, и отрисовка основного экрана с кнопками после нажатия на картинку. то есть действительно получается дело было в градиентах кнопок дефолтного Plastique стиля ?  в код, что в атачменте в стартовом сообщении этого топика вставил вот это:

--- a/main.cpp  2010-05-18 00:16:58.341568500 +0400
+++ b/main.cpp  2010-05-18 00:16:27.147619000 +0400
@@ -1,4 +1,5 @@
 #include <QApplication>
+#include <QStyleFactory>
 
 #include "ui_but.h"
 #include "main.h"
@@ -115,6 +116,8 @@ MyWidget::MyWidget(QMainWindow *w)
  */
 int main(void)
 {
+       QApplication::setStyle(QStyleFactory::create("Windows"));
+
        char *argv[] = {"but.qt4", "-qws"};
        int argc = sizeof(argv)/sizeof(argv[0]);
        QApplication app(argc, argv);
Записан