2015-06-18 12 views
0

Мне нужно уменьшить разрешение изображений, которые я добавляю и показывать в QListWidgtet. Теперь я использую следующий код, но он не показывает все изображения, потому что они загружаются с полным разрешениемзагрузить миниатюру в QListWidget с уменьшенным разрешением

void ImagesWizard::on_pbAddImages_clicked() 
{ 
QFileDialog dialog(this); 
dialog.setDirectory(mInitPath); 
dialog.setFileMode(QFileDialog::ExistingFiles); 
dialog.setNameFilter(trUtf8("Images (*.jpg *.png *.tif *.tiff *.bmp);; JPG (*.jpg);; PNG (*.png);; TIF (*.tif *.tiff);; BMP (*.bmp);;")); 

QStringList filesToLoad; 
if (dialog.exec()) 
    filesToLoad = dialog.selectedFiles(); 


if (filesToLoad.count()!=0) { 
     QListWidget *localPathList= new QListWidget(); 
    localPathList->setViewMode(QListWidget::IconMode); 
    localPathList->setIconSize(QSize(100,100)); 
    localPathList->setResizeMode(QListWidget::Adjust); 
    localPathList->setSelectionMode(QAbstractItemView::MultiSelection); 
    for (int var = 0; var < filesToLoad.count(); ++var) { 
      if (!mImagesList->contains(filesToLoad[var])) { 
       QFileInfo fileInfo(filesToLoad[var]); 
       QString filename(fileInfo.fileName()); 
       QListWidgetItem *listItem = new QListWidgetItem(QIcon(filesToLoad[var]),filename); 
       localPathList->addItem(listItem); 
       mImagesList->append(filesToLoad[var]); 
      } 
    } 
pbNext->setFocus(); 
} 

}

Есть ли способ, чтобы изменить размер разрешения в о QIcon к optimice время, затрачиваемое на загрузку изображений и отображение всех добавленных изображений? Теперь, если я загружаю много изображений, последние QListWidgetItems добавляют только имя.

Спасибо за вашу помощь

ответ

1

Использование QImage первым масштабировать изображение и построить иконку из полученных пиксельных.

QSize desiredSize; 
Qimage orig(filesToLoad[var]); 
Qimage scaled = orig.scaled(
      desiredSize, 
      Qt::IgnoreAspectRatio, 
      Qt::SmoothTransformation); 

QListWidgetItem *listItem = new QListWidgetItem(QIcon(Qpixmap::fromImage(scaled)),filename); 

Очень часто для хранения заданного изображения на диске, чтобы избежать двухэтапного преобразования.

+0

Спасибо @UmNyobe. Он работает, и я могу показать все изображения, используя этот метод. Но время заряда все еще слишком велико. я попытаюсь запустить инструкцию «for» многопоточным способом. Спасибо за вашу помощь. –