/ / Qt - Wyświetl animowany GIF wybrany przez QListWidget na MainWindow - c ++, qt, animacja, animowany-gif, qt-designer

Qt - Wyświetl animowany GIF wybrany przez QListWidget na MainWindow - c ++, qt, animacja, animowany-gif, qt-designer

z góry dziękuję za przeczytanie i pomoc.

Próbuję utworzyć menedżera GIF na podstawieQListWidget, w którym możesz wybrać GIF z listy (używając na _ * _ itemClicked, jak widać poniżej), a pojawi się animowany GIF w miejscu poniżej listy (lub z boku, nie ma znaczenia).

void MainWindow::on_listOfURL_itemClicked(QListWidgetItem *item)
{
QLabel* lab = new QLabel(this);
QMovie* mov = new QMovie(":/res/giftest/C:/Users/Rober/Desktop/giftest.gif");
lab->setGeometry(200, 200, 200, 200);
lab->setMovie(mov);
lab->show();
mov->start();
}

Zrzut ekranu z GUI programu

Próbowałem użyć powyższego fragmentu kodu, ale nic nie pokazuje. To tylko daremna próba sprawienia, aby działał, dlatego ścieżka GIF jest taka sama, nie musisz się tym martwić.

Szczerze, przeszukuję wiele kodów na forach i tej stronie internetowej dotyczących GIF-ów i animacji, i żadna z rzeczy, które widziałem, nie działała dla mnie.

jak powinienem postąpić? Myślę, że powinienem użyć graficznej QWidget w interfejsie użytkownika i połączyć ją z funkcją na _ * _ itemClicked, więc pobiera lokalizację obrazu z QListWidgetItem i wyświetla tam, gdzie wskazałem w interfejsie użytkownika.

Wkleiłem tutaj kod, przeglądając Mighty Google i budzi to pewne wątpliwości:

  • Tworzę QLabel z MainWindow jako rodzicem. Okej, ale gdzie to się pojawi?
  • Czy nie mogę utworzyć w programie Designer widżetu, który mogę zdefiniować, gdzie to będzie, i po prostu sprawić, by GIF działał?

Myślę, że wyjaśniłem się poprawnie, jeśli nie po prostu daj mi znać.

EDYCJA: Myślę, że potrzebuję QLabel, który znajduje się w MainWindow, poniżej listy adresów URL. Jak ukształtować ten QLabel w QtDesigner, a następnie wziąć ten sam QLabel w kodzie i manipulować nim za pomocą GIF?

Odpowiedzi:

0 dla odpowiedzi № 1

Myślę, że musisz dołączyć do .pro

QTPLUGIN     +=  qgif

i pokaż label->show();

Oczywiście możesz dodawać rzeczy w projektancie. Możesz dodać utworzone przez siebie niestandardowe widżety, ale potrzebujesz specjalnego projektu, który utworzyłby „wtyczkę” dla Projektanta i zbudowałby ją w trybie Release, a następnie zainstalował wtyczkę we właściwym folderze wtyczek. W tym celu upewnij się, że są one dodane do pliku .pro:

CONFIG      += plugin
TEMPLATE    = lib
QT          += widgets uiplugin

Następnie musisz zadeklarować i wdrożyć wtyczkę pochodzącą z QObject AND QDesignerCustomWidgetInterface.

SPRAWDŹ ważność: mov->isValid() Kod, który opiera się na dobrym źródle zewnętrznym, ostatecznie staje się źródłem drobnych katastrof. Program albo potrzebuje .dll wtyczki obok niej, albo statycznej wtyczki z nią powiązanej

Po zainstalowaniu Qt zainstalowano aplikację o nazwieQtAssistant. Skorzystaj z tego. To ogromna pomoc, a także ich fora i przykłady przechowywania w katalogu Qt. Qt5 ma przykładowy plugin online: http://doc.qt.io/qt-5/qtwidgets-tutorials-widgets-childwidget-example.html


0 dla odpowiedzi nr 2

Dobra, znalazłem odpowiedź. Właściwie to było dość głupie:

Nie zdawałem sobie sprawy, że mogę wybrać QLabel utworzony w QtDesigner za pomocą etykiety ui-> i manipulować nim.

ui->label->setMovie(selectedGif);
selectedGif->start();
ui->label->show();

Błędy początkujące ...