QGraphicsView с автоматическим размещением предметов - PullRequest
2 голосов
/ 08 октября 2009

Я хотел бы написать браузер ресурсов, используя QGraphicsView. Это немного отличается от примеров, использующих QGraphicsView и QGraphicsItems, потому что мне нужна только одна полоса прокрутки, и я хочу, чтобы элементы перемещались автоматически при изменении размера области просмотра. Например, когда ширина области просмотра достаточно велика для отображения 4-х заданий, они должны отображаться так:

aaaa
aaaa
aa

но когда область просмотра уменьшается и может содержать только 3 строки подряд, она должна отображать их следующим образом:

aaa
aaa
aaa
a

Мне бы не хотелось самостоятельно перемещать эти активы и позволить графическому представлению управлять ими всеми. Это как-то возможно?

Я однажды написал такую ​​вещь, но использовал QWidget и paintEvent, рисуя все активы самостоятельно и отслеживая, сколько активов может отображаться в строке. Можно ли сделать это проще с QGraphicsView?

Ответы [ 3 ]

5 голосов
/ 08 октября 2009

QGraphicsView поддерживает макеты. Что вам нужно сделать, так это реализовать свой собственный менеджер макетов, унаследованный от QGraphicsLayout.

Для нужного вам макета взгляните на пример Flow Layout Qt. Преобразование этого примера даст вам QGraphicsFlowLayout. Добавьте ваши QGraphicsItems в этот макет и установите макет вашего QGraphicsView в этот макет, и это поможет.

1 голос
/ 08 октября 2009

Мне кажется, вы хотите список, а не графический вид. Список может быть настроен для отображения вещей, которые вы хотите обернуть. Посмотрите пример головоломки , обращая внимание на список частей головоломки слева. Это выглядит довольно просто настроить для представленного случая.

Конечно, если вы действительно хотите это в графическом представлении, я полагаю, вы могли бы добавить список к представлению и использовать его там.

0 голосов
/ 08 октября 2009

Я бы использовал пользовательский макет, чтобы сделать это. Попробуйте создать свой собственный класс Layout, который наследуется от QGraphicsLayout, и управляйте тем, как он размещает элементы.

...