crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> жуткие тормоза при отрисовке фона программы (drawImage)
Rocky
  опции профиля:
сообщение 5.2.2010, 0:19
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Еще раз всем привет... Вот столкнулся с очередной проблемкой... Есть такой кусок кода
//в конструкторе класса
m_oBackgroundImage = QImage(GetApplicationDirPath() + "/UI/_Back.jpg");

//далее отрисовка
void CStationClient::paintEvent(QPaintEvent *pEvent)
{
    QPainter oPainter(this);
    oPainter.drawImage(this->rect(), m_oBackgroundImage);
    pEvent->accept();
}

И все. В винде все летает.... скомпилил в линуксе - загрузка цп под 80%. Тормоза просто дикие. Почему так может быть? 2 часа пытался понять что за фигня. У меня KDE со всеми наворотами, compiz все летает просто.. а тут простенькая программа одной функцией по сути убивает все..... Как лучше всего фон программе задать? Единственное что в голову приходит это запихнуть в ремурсы... Утром проверю поможет ли это или нет... Но непонятно почему так тормозит программа из-за этого? _Back.jpg размером 1280х1024.... Весит 300 КБ....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 5.2.2010, 17:50
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Цитата(BRE @ 5.2.2010, 10:30) *
А если попробовать:
background-origin: content;

Неа, не помогает (

Есть еще background-size, но он не поддерживается QT

ща попкопаю в эту сторону
Цитата
A background-image does not scale with the size of the widget. To provide a "skin" or background that scales along with the widget size, one must you the border-image. Since the border-image property provides an alternate background, it is not required to specify a background-image when border-image is specified. In the case, when both of them are specified, the border-image draws over the background-image.


---------------------------------------
да..... сделал так
    qApp->setStyleSheet(QString("QMainWindow { "
        "border-image:url(" + qApp->applicationDirPath() + "/UI/_Back.png);"
        "}"
    ));


Картинка растягивается..... но опять тормоза... по-моему еще больше чем при обычной отрисовке в paintEvent (


--------------------------------------
баг что-ли это
http://bugreports.qt.nokia.com/browse/QTBU...%3Aall-tabpanel
Вероятно придется насоздавать кучу картинок под все разрешения =)... Хотя это жутко по-идиотски

------------------------------------
да и при использовании стилей в линуксе все равно притормаживает (

BRE, если не сложно можно простенький пример как область переисовывать? или просто на словах... ведь картинка получается масштабируемой... т.е. нужно выщитывать координаты картинки с учетом масштабирования, затем что-то типа грабить реальную область изображения, создавать другой QImage и кормить его painter-у? Или не так?


Я вот подумал.. а влияет ли на производительность то как собрана qt? Статически или динамически, или включена ли поддкержка opengl?

Сообщение отредактировал Rocky - 5.2.2010, 23:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 7:37