Добрый день всем. У меня следующая проблема. В коде создаю QListWidget в который добавляю QListWidgetItem с картинками. Картинка может весить до 20 МБ. И потому после выбора картинке в файловом диалоге картинка на форме показывается не сразу, а спустя секунд 4-5. Хотела во время этого ожидания отображать gif анимацию. Но столкнулась с проблемой. Пока картинка грузится в объект анимация тоже не показывается... :( Подскажите, пожалуйста, как можно решить эту проблему ? Мне нужно чтобы анимация показывалась сразу, без задержек.
Вот мой код:
// заголовочный файл
class Loader : public QLabel{
public:
Loader()
{
animate = new QMovie(_pathToGif);
animate->setFileName(_pathToGif);
this->setMovie(animate);
animate->start();
}
~Loader()
{
animate->stop();
}
private:
QString _pathToGif = "ajax-loader.gif";
QMovie* animate;
};
class UploadPhotos : public QWidget
{
Q_OBJECT
public:
explicit UploadPhotos(QWidget *parent = 0);
~UploadPhotos();
private:
Ui::UploadPhotos *ui;
QListWidget *listWidget;
QPushButton *addPhotoPushButton;
Loader *loader;
QListWidgetItem* createQListWidgetItem();
private slots:
void addPhotoPushButton_clicked();
};
// файл реализации
void UploadPhotos::addPhotoPushButton_clicked()
{
QFileDialog dialog(this);
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
dialog.setViewMode(QFileDialog::Detail);
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"),
"C:/",
tr("Images (*.png *.jpg)"));
qDebug() << filePath;
QFileInfo fi(filePath);
QString fileName = fi.baseName();
QString fileSuffix = fi.suffix();
QString fileNameAndSuffix = fi.fileName();
qDebug() << fi.completeSuffix() << fi.suffix();
QListWidgetItem* item = createQListWidgetItem(); // показывает анимацию gif
QIcon icon = QIcon(filePath); // здесь подгружается выбранная пользовательм картинка!
item->setData(Qt::DecorationRole, icon); // показываем эту картинку
}
QListWidgetItem *UploadPhotos::createQListWidgetItem()
{
QListWidgetItem* item = new QListWidgetItem( listWidget );
item->setSizeHint( loader->sizeHint() );
listWidget->setItemWidget( item, loader );
return item;
}
Хотелось бы решить эту проблему без загрузки картинки в другом потоке. Возможно ли это ?
Хотелось бы решить эту проблему без загрузки картинки в другом потоке. Возможно ли это ?
Нет. Но ничего сложного в использовании другого потока нет, посмотрите примеры на QtConcurrent.