Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: karonator от Октябрь 08, 2010, 22:51



Название: Как сделать прокрутку правильно?
Отправлено: karonator от Октябрь 08, 2010, 22:51
Доброе время суток всем.
К сожалению, вопрос мой несколько запутанный,но я постараюсь ясно сформулировать.

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


Название: Re: Как сделать прокрутку правильно?
Отправлено: shirushizo от Октябрь 09, 2010, 09:08
Про "два слоя в каждом по 40 лейблов, один над другим" ничего не понял...

Есть класс QStackedWidget в нем хранится несколько QWidget* и показывается только 1. Можно сделать, например, 10 стеков по 4 (и сколько там надо) QLabel* и сделать по страничную прокрукту - показывать соответствующие лейблы.
Хотя выйгрыша по памяти все равно не будет.


Название: Re: Как сделать прокрутку правильно?
Отправлено: karonator от Октябрь 09, 2010, 10:57
Вот я попробовал нарисовать пример:
(http://s49.radikal.ru/i124/1010/c0/9be908e4ec37.jpg)

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

В итоге должно получиться нечто подобное:
(http://indesignsecrets.com/wp-content/uploads/2010/01/ibooks.jpg)

Только у каждой книжки рамочка, представьте. Айпад ни при чём, просто картинка удачная.


Название: Re: Как сделать прокрутку правильно?
Отправлено: Makss от Октябрь 09, 2010, 11:46
лудше сами рисуйте, слишком уж тяжело - это по количеству лейблов


Название: Re: Как сделать прокрутку правильно?
Отправлено: karonator от Октябрь 09, 2010, 14:57
Самому рисовать?
Через OpenGL то есть?
Расскажите поподробнее пожалуйста.


Название: Re: Как сделать прокрутку правильно?
Отправлено: andrew.k от Октябрь 09, 2010, 18:49
Мне вот интересно, а что это за "слои" такие? как можно лабелы положить "в два слоя" :)


Название: Re: Как сделать прокрутку правильно?
Отправлено: andrew.k от Октябрь 09, 2010, 19:02
насчет реализации, мне кажется проще всего, тем более для новичка, надо не опенГЛ мучать, а элементарно взять за основу QTreeView и сделать собственную отрисовку айтемов, ну и для всего контрола. И прокрутку даже не надо будет программировать.

а как делать тень, немножко обсуждалось тут: http://www.prog.org.ru/topic_13524_0.html
правда эффект тени появился в 4.6, но врядли это вообще пригодится :)


Название: Re: Как сделать прокрутку правильно?
Отправлено: whirlwind от Октябрь 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 должно бы хватить, если железо не сильно старое/специфичное


Название: Re: Как сделать прокрутку правильно?
Отправлено: GreatSnake от Октябрь 11, 2010, 09:07
Для отрисовки теней используй QGraphicsDropShadowEffect, тогда и слои городить не придётся)


Название: Re: Как сделать прокрутку правильно?
Отправлено: Sergey B. от Октябрь 11, 2010, 10:00


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

А у него можно сделать примерно так:
Код:
 setViewport(new QGlWidget());
и будет всё через openGL рисоваться.