Czy da się jakoś wcisnąć QGraphicsPixmapItem w układ obsługujący tylko QWidgety?

0

Hej,
mam sobie niemodyfikowany flow layout, który jest obsługiwany przez QGraphicsView. No i chciałbym sobie wrzucać na ten layout zdjęcia, ale problem leży w tym, że są QGraphicsPixmapItemami, a mogę jedynie dodawać do układu obiekty typu QWidget, czyli jak zamienię sobie je na jakieś QLabele, to będzie działać.
Jak to wygląda?
w konstruktorze mainwindowa:

scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene); //QGraphicsView

flow_layout = new FlowLayout();
ui->graphicsView->setLayout(flow_layout);

w funkcji dodającej nowe obiekty:

auto item{ new QGraphicsPixmapItem{ QPixmap::fromImage(image) } };
item->setScale(0.1);
item->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);

//flow_layout->addWidget(new QPushButton(tr("dupa"))); //to ofc działa :D
flow_layout->addWidget(item); // cannot initialize a parameter of type 'QLayoutItem *' with an lvalue of type 'QGraphicsPixmapItem *'

jak widać wykorzystuję flagi i sobie skaluje obraz. O ile ze skalowaniem to nie jest problem, bo mogę sobie zdjęcia wrzucić na QLabel i statycznie je jakoś zwiększać/zmniejszać to już nie wiem jak zachować właściwości przypisanych im flag używając innego typu.

Próbowałem bawić się też z QGraphicsProxyWidget, ale nie mogę tego przekazać do funkcji, bo nie jest to typ związany z QWidget. Chociaż też po prostu nie umiem korzystać z tej klasy.

A no i tych obrazów może być sporo. QWidget chyba jest za ciężkim obiektem, żeby go radośnie ładować x500?

Jeżeli nie da się tego w jakiś sposób obejść, to pewnie będę musiał implementować swój własny flow_layout sztywno pozycjonujący kolejne obiekty + jakieś eventy :c
Jakieś wskazówki? c:

0

Odpowiedz sobie lepiej. Gdzie używa się QGraphicsPixmapItem? A no z https://doc.qt.io/qt-5/qgraphicsscene.html

Ogólnie potrzebujesz tutoriala qt bo robisz wszystko na pałe. Najpierw tutorial podstaw gui w qt a później tutorial z graphics view.
W skrócie:

  1. Masz widok.
  2. Ładujesz zdjęcie do widoku.
  3. Na zdjęciu przed załadowaniem możesz wykonać jakieś operacje albo bezpośrednio w widoku. Do poczytania.
0

@revcorey: dobra, to inaczej: czy da się zastosować flow layout z podlinkowanego przykładu bezpośrednio na scenie, bez tworzenia nowego okna jak to autor uczynił i z QGraphicsPixmapItemami zamiast QLabelów. Tak/Nie

0

ZTCW, nie. QGrpahicsScene i QGraphicsView jako widget narzucają mi się jako pierwsze.

0

Źle do tego podchodzisz. Bez poznania podstaw nie naklepiesz, przykłady qt są dla ciebie drogowskazem. Poczytaj dokładnie o tym.

0

@revcorey: co z tego, że dodam swoje obiekty na scenę, skoro flow layout nie będzie na nie w żaden sposób wpływał? Chciałem w zasadzie żeby ktoś na to rzucił okiem, powiedział czy jest to możliwe do zrobienia lub nie, bo wtedy po prostu zacząłbym skrobać coś swojego, a nie marnował czas na kombinowanie z tym flow layoutem gdy niekoniecznie będzie działać.

  • Wrzucę QGraphicsItemy na scenę: flow layout nie działa
  • Wrzucę QWidgety na flow layout: wszystko działa
  • Wrzucę QGraphicsItemy na flow layout: nic nie działa

czyli wygląda na to, że po prostu muszę nasmarować coś swojego.

ale z drugiej strony czuję jakoś, że rozwiązanie jest blisko, może udałoby się osiągnąć jakiś kompromis.

0

Bo właśnie nie rozumiesz co robisz. Flowlayouty wpływają na położenie widgetu a nie tego co jest we wewnątrz. Nie wiem co ty chcesz osiągnąć? Bo z jednej strony chcesz wyświetlać zdjęcia z drugiej nie wiem je przesuwać? Co chcesz osiągnąć bo to co piszesz ani kod nie mają sensu.

0

Chcę, aby zdjęcia na mojej scenie się relatywnie pozycjonowały w miarę zmieniania rozmiaru okna.

Uproszczę więc to bardziej: QGraphicsItem ma flagi typu QGraphicsItem::ItemIsSelectable, które mi są potrzebne, a AFAIK nie mogę ich użyć na widżetach przez co w jakiś sposób próbuję te itemy wcisnąć. Jeśli użyje zwykłych widżetów, to wyobraź sobie, że wszystko działa, ale tracę możliwość użycia tych flag.

Zadam jeszcze pytanie inaczej: czy widżet może mieć właściwości w stylu QGraphicsItem::ItemIsSelectable? Jeżeli tak, to wtedy mógłbym zrezygnować z QGraphicsPixmapItem.

0

Może QListView w trybie IconMode będzie spełniał oczekiwania?

1 użytkowników online, w tym zalogowanych: 0, gości: 1