2015-06-18 41 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的分辨率工藝優化的消耗時間來加載圖像並顯示添加的所有圖像? 現在,如果我加載了很多圖像,最後一個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」語句。謝謝你的幫助。 –