Russian Qt Forum
Февраль 05, 2012, 21:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
(Модератор:
Sergeich
) >
Как отловить видимость виджета?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как отловить видимость виджета? (Прочитано 611 раз)
TheMixa
Гость
Как отловить видимость виджета?
«
:
Август 23, 2010, 07:56 »
Подскажите возможноли решить следующую задачу таким образом.
Есть QScrollWidget, в нем в куча (до 500 шт) изображений(производное от QLabel) размера A4 сгруппированых в vbox. Так вот когда колво изображений велико(например 80) если загружать туда их циклом то получается медленно, вроде простое решение загружать их отдельным процессом тем самым пользователь начнет работать сразу, токже поступить и с масштабированием. Но вся проблема в том что не каждый офисный компьютер это пережует спокойно.
Надумал такое решение: отлавливать фактическую видимость изображения(qlabel) в scrollwidget и тем самым загружать/перерисовыват при необходимости. Но как это сделать? paintEvent() сработает только тогда когда надо реально перерисовать, например измениятся геометрия scrollwidget. Есть ли возможность?
Или может есть идеи как сделать это эффективнее чтобы не перерисовывать все изображения в фоне сразу например при изменении масштаба или загрузке?
Записан
Авварон
phpBB Neo
Offline
Сообщений: 1775
Re: Как отловить видимость виджета?
«
Ответ #1 :
Август 23, 2010, 08:33 »
не процесс, а поток. И бояться потоков не надо, если вам так страшно, можете приоритет понизить.
Записан
TheMixa
Гость
Re: Как отловить видимость виджета?
«
Ответ #2 :
Август 23, 2010, 09:28 »
с потоками на qt еще не работал, походу придется.
вспринципе paintEvent подходит для этого но слишком рваный скрол получается да и срабатывает он на каждый чих
Код:
if(loadstate != 1) {
if(loadstate == 0) {
QLabel::paintEvent(event);
}
else {
loadstate = 0;
showPage(currentPage);
}
}
else
loadstate = 2;
«
Последнее редактирование: Август 23, 2010, 09:33 от TheMixa
»
Записан
TheMixa
Гость
Re: Как отловить видимость виджета?
«
Ответ #3 :
Август 23, 2010, 10:09 »
отвечу всам себе вдруг кому пригодится.
Проблему рваности скрола решил так: при первой загрузке изображения за место него отресовывается пустой пиксмап аналогичного размера, а далее по приведенной выше логике в paintEvent на второй раз рисуется оригинал.
недостатком является то что если на стартовом экране больше одной картики помещается(не мой случай) то отрисуется только первая а остальные будут пустыми.
Записан
GreatSnake
phpBB Neo
Offline
Сообщений: 1604
Re: Как отловить видимость виджета?
«
Ответ #4 :
Август 23, 2010, 11:32 »
Получаем размер картинки через QImageReader::size()
и задействуем QGraphicsScene/QGraphicsView/QGraphicsRectItem's.
Грузим картинку непосредственно перед первой отрисовкой в QGraphicsRectItem::paint().
Рекомендую использовать QImage вместо QPixmap.
«
Последнее редактирование: Август 23, 2010, 11:33 от GreatSnake
»
Записан
Qt 4.7.4 (X11/Win)
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...