Wpis z mikrobloga

Witam, mam taki kod: https://pastebin.com/k7cKjy8r
W pewnym przypadku ma on wyświetlić okno dialogowe i ustawić zaznaczenie elementu, gdy to okno się zamknie lub, gdy się wybierze cancel. Jednak setCurrentItem powoduje ponowne wywołanie onlistWidgetNotescurrentItemChanged czego efektem jest ciągłe ponowne pojawianie się okna dialogowego po jego zamknięciu. Użycie blockSignals sprawia, że problem znika, ale zaznaczenie nie wraca na poprzedni element. Próbowałem wielu innych rozwiązań np. użycie zmiennej przechowującej informację o tym czy wywołać nowe okno, ale nic nie pomaga. W dokumentacji, którą przeglądałem wielokrotnie czy na zagranicznych forach również nie znalazłem odpowiedzi.
#cpp #qt #qt5 #programowanie
  • 3
@arkadiusz97:

np. użycie zmiennej przechowującej informację o tym czy wywołać nowe okno

A czy próbowałeś zmiennej przechowującej ostatnio wybrany element?
Jeżeli element się zgadza to nie odpalasz okienka. Jak się nie zgadza to odpalasz i dopiero jak klinie tak to zmieniasz ten element.
Zresztą tak jak powinno działć każde Q_PROPERTY w Qt ( ͡° ͜ʖ ͡°)
Aha przechowuj sobie QPointer (a przekazuj jako zwykły wskaźnik), bo nie
@lionbest: Tzn. mam zrobić pole klasy głównego okna typu QListWidgetItem*, przy każdej zmianie focusa zapisać kopię zmiennej QListWidgetItem *current do tego pola i, gdy zmieni się focus pokazać okno, gdy tak kopia będzie taka sama jak zmienna QListWidgetItem *previous?
@arkadiusz97:

rzy każdej zmianie focusa zapisać kopię zmiennej QListWidgetItem *current do tego pola

Nie, tylko wtedy kiedy faktycznie chcesz zmienić element na ten w current.

gdy zmieni się focus pokazać okno, gdy tak kopia będzie taka sama jak zmienna QListWidgetItem *previous

No chyba nie. Ty nie chcesz pokazywać okienka znowu, czyli jeżeli poprzednie pokazanie okienka spowodowało wykonanie się:
ui->listWidgetNotes->setCurrentItem(previous);

Co spowodowało znowu zmienienie elementu na poprzedni, czyli ten który masz