2016-12-03 12 views
0

заблаговременно за чтение и помощь.Qt - отображение анимированного GIF, выбранного QListWidget на MainWindow

Я пытаюсь создать диспетчер GIF на основе QListWidget, где вы можете выбрать GIF из списка (используя на _ * _ itemClicked, как вы можете видеть ниже), и он появится в анимированном GIF в пространстве ниже список (или сбоку, не имеет значения).

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(); 
} 

GUI screenshot of the program

Я попытался использовать кусок кода выше, но ничего не показывает. Это просто бесполезная попытка заставить его работать, поэтому путь GIF тот же, вам не нужно беспокоиться об этом.

Честно говоря, я искал много кода на форумах и на этом самом сайте относительно GIFS и анимаций, и ни одна из вещей, которые я видел, не работала для меня.

Как я могу продолжить? Я предполагаю, что я должен использовать графический QWidget в пользовательском интерфейсе и связать его с функцией на _ * _ itemClicked, чтобы он отобразил местоположение изображения из QListWidgetItem и отобразил, где я указал в пользовательском интерфейсе.

Я получил код наклеен здесь серфинга Могучего Google, и это приносит мне некоторые сомнения:

  • создать QLabel с MainWindow как родитель. Хорошо, но где он появится?
  • Могу ли я создать в конструкторе виджет, который я могу определить, где он будет, и просто сделать работу GIF?

Я думаю, что правильно объяснил себя, если не просто дайте мне знать.

EDIT: Я думаю, что мне нужен QLabel, который находится внутри MainWindow, под списком URL. Как я могу создать QLabel в QtDesigner, а затем взять тот же QLabel в коде и манипулировать им с GIF?

ответ

0

Я думаю, вам нужно включить в .pro

QTPLUGIN  += qgif  

и показать label->show();

Конечно, вы можете добавить вещи дизайнера. Вы можете добавить пользовательские виджеты, которые вы создаете, но вам нужно сделать специальный проект, который сделает «плагин» для Designer и построит его в режиме Release, а затем установите плагин в соответствующую папку с плагинами. Для этого вы должны быть уверены, что те, которые добавлены в .pro файл:

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

Тогда вам нужно объявить и реализовать плагин, производный от QObject И QDesignerCustomWidgetInterface.

DO CHECK validation: mov->isValid() Код, основанный на использовании внешних источников, в конечном итоге становится источником небольших бедствий. Программа либо нуждается в плагине .dll рядом с ней, либо связанном с ней статическом подключаемом модуле

Когда вы установили Qt, вы установили приложение под названием QtAssistant. Воспользуйтесь этим. Это большая помощь. а также их форумы и хранилища примеров, которые вы получили в каталоге Qt. Qt5 получил пример плагина онлайн: http://doc.qt.io/qt-5/qtwidgets-tutorials-widgets-childwidget-example.html

+0

Я включил то, что вы говорите, даже IsValid(). Похоже, что GIF действителен, но он не показан. –

0

Хорошо, я нашел ответ.Это было довольно глупо:

Я не понимал, что могу выбрать QLabel, созданный в QtDesigner, с помощью метки ui-> и манипулировать им.

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

Начинающие ошибки ...