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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать прокрутку правильно?  (Прочитано 6553 раз)
karonator
Гость
« : Октябрь 08, 2010, 22:51 »

Доброе время суток всем.
К сожалению, вопрос мой несколько запутанный,но я постараюсь ясно сформулировать.

Итак у меня есть главное окно. На нём постоянно будет находиться около 40 лейблов, причём в два слоя. То есть два слоя в каждом по 40 лейблов, один над другим. Всего лейблов много. Вопрос звучит так: если делать прокрутку вручную, перехватывая событие вручную, будут ли лаги?
Просто qscrollarea тут не исполтзуешь, так как к нему вроде как не прикрутить плавную прокрутку и задний фон, и нерпсположить элементы в два слоя. Вот отсюда и вопрос, если делать скроллинг ручками, можно ли сделать плавный и без лагов.
Заранее всем спасибо за ответы, извините если чегото не понимаю, в куте несколько дней всего.
Записан
shirushizo
Гость
« Ответ #1 : Октябрь 09, 2010, 09:08 »

Про "два слоя в каждом по 40 лейблов, один над другим" ничего не понял...

Есть класс QStackedWidget в нем хранится несколько QWidget* и показывается только 1. Можно сделать, например, 10 стеков по 4 (и сколько там надо) QLabel* и сделать по страничную прокрукту - показывать соответствующие лейблы.
Хотя выйгрыша по памяти все равно не будет.
Записан
karonator
Гость
« Ответ #2 : Октябрь 09, 2010, 10:57 »

Вот я попробовал нарисовать пример:


То есть два слоя. По сути в нижнем слое будут иконки, а в верхнем полупрозрачные рамочки.
Можно ли такое рисовать лейблами и прокручивать ручками?
Как сделать чтоб прокрутка была плавной?
Ну...посоветуйте пожалуйста как быть, я в QT пока совсем зелёный.  Улыбающийся

В итоге должно получиться нечто подобное:


Только у каждой книжки рамочка, представьте. Айпад ни при чём, просто картинка удачная.
Записан
Makss
Гость
« Ответ #3 : Октябрь 09, 2010, 11:46 »

лудше сами рисуйте, слишком уж тяжело - это по количеству лейблов
Записан
karonator
Гость
« Ответ #4 : Октябрь 09, 2010, 14:57 »

Самому рисовать?
Через OpenGL то есть?
Расскажите поподробнее пожалуйста.
Записан
andrew.k
Гость
« Ответ #5 : Октябрь 09, 2010, 18:49 »

Мне вот интересно, а что это за "слои" такие? как можно лабелы положить "в два слоя" Улыбающийся
Записан
andrew.k
Гость
« Ответ #6 : Октябрь 09, 2010, 19:02 »

насчет реализации, мне кажется проще всего, тем более для новичка, надо не опенГЛ мучать, а элементарно взять за основу QTreeView и сделать собственную отрисовку айтемов, ну и для всего контрола. И прокрутку даже не надо будет программировать.

а как делать тень, немножко обсуждалось тут: http://www.prog.org.ru/topic_13524_0.html
правда эффект тени появился в 4.6, но врядли это вообще пригодится Улыбающийся
Записан
whirlwind
Гость
« Ответ #7 : Октябрь 09, 2010, 20:40 »

есть QGraphicsView, про него в описании прям так и сказано

Graphics View provides a surface for managing and interacting with a large number of custom-made 2D graphical items, and a view widget for visualizing the items, with support for zooming and rotation.

http://doc.qt.nokia.com/4.7/graphicsview.html#graphicsview

Хотя вообще странно, как по-моему, обычного scroll area должно бы хватить, если железо не сильно старое/специфичное
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Октябрь 11, 2010, 09:07 »

Для отрисовки теней используй QGraphicsDropShadowEffect, тогда и слои городить не придётся)
Записан

Qt 5.11/4.8.7 (X11/Win)
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #9 : Октябрь 11, 2010, 10:00 »


А у него можно сделать примерно так:
Код:
 setViewport(new QGlWidget());
и будет всё через openGL рисоваться.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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