Qt QListWidget實現圖片縮圖列表
阿新 • • 發佈:2018-12-07
目標:
將本機中的多張圖片以縮圖的形式顯示在列表中
環境:
我們已經做好了選單欄和檔案選擇對話方塊。參考:http://blog.csdn.net/v_xchen_v/article/details/71524160
實現:
以縮圖列表展示圖片的功能寫在mymenu類的成員函式showImageList()中。使用Qt自帶的QListWidget類實現這個功能
步驟:
- 1.定義一個QListWidget物件
- 2. 設定ViewMode等屬性
- 3.定義單元項並新增到QListWidget中
- 4.呼叫QListWidget物件的show()方法
程式碼如下:
mymenu.h
1 #ifndef MYMENU_H 2 #define MYMENU_H 3 4 #include "QMainWindow" 5 class mymenu : public QMainWindow 6 { 7 Q_OBJECT // must include this if you use Qt signals/slots 8 public: 9 //建構函式 10 explicit mymenu(QWidget *parent = 0);//QWidget *parent = 0 表示mymenu控制元件不是任何控制元件的子控制元件 11 12 private slots: 13 void fileOpenActionSlot();//開啟檔案動作對應的槽函式 14 private: 15 void createAction(); //建立動作 16 void createMenu(); //建立選單 17 void createContentMenu();//建立上下文選單 18 private: 19 void selectFile(); //彈出選擇檔案對話方塊 20 void showImageList(); //用縮圖顯示圖片 21 private: 22 QAction *fileOpenAction; //建立一個QAction指標,開啟檔案動作 23 QMenu *menu; //建立一個QMenu指標 24 private: 25 QStringList fileNames; 26 }; 27 28 #endif // MYMENU_H
mymenu.cpp
1 #include "mymenu.h" 2 #include "QMenu" 3 #include "QMenuBar" 4 #include "QAction" 5 #include "QMessageBox" 6 #include "QFileDialog" 7 #include "QDebug" 8 #include "QListWidget" 9 /**************************************** 10 * Qt中建立選單和工具欄需要如下步驟: 11 * 1. 建立行為Aciton 12 * 2. 建立選單並使它與一個行為關聯 13 * 3. 建立工具條並使它與一個行為關聯 14 *****************************************/ 15 mymenu::mymenu(QWidget *parent):QMainWindow(parent) 16 { 17 createAction(); 18 createMenu(); 19 createContentMenu(); 20 this->resize(300,400); 21 } 22 void mymenu::createAction() 23 { 24 //建立開啟檔案動作 25 fileOpenAction = new QAction(tr("開啟檔案"),this); 26 //攝者開啟檔案的快捷方式 27 fileOpenAction->setShortcut(tr("Ctrl+O")); 28 //設定開啟檔案動作提示資訊 29 fileOpenAction->setStatusTip("開啟一個檔案"); 30 //關聯開啟檔案動作的訊號和槽 31 connect(fileOpenAction,SIGNAL(triggered()),this,SLOT(fileOpenActionSlot())); 32 } 33 void mymenu::createMenu() 34 { 35 menu = this->menuBar()->addMenu(tr("檔案")); 36 menu->addAction(fileOpenAction); 37 } 38 39 void mymenu::createContentMenu() 40 { 41 this->addAction(fileOpenAction); 42 this->setContextMenuPolicy(Qt::ActionsContextMenu); 43 } 44 45 void mymenu::fileOpenActionSlot() 46 { 47 //QMessageBox::warning(this,tr("提示"),tr("開啟檔案"),QMessageBox::Yes|QMessageBox::No); 48 selectFile(); 49 } 50 /**************************************** 51 * Qt中使用檔案選擇對話方塊步驟如下: 52 * 1. 定義一個QFileDialog物件 53 * 2. 設定路徑、過濾器等屬性 54 *****************************************/ 55 void mymenu::selectFile() 56 { 57 //定義檔案對話方塊類 58 QFileDialog *fileDialog = new QFileDialog(this); 59 //定義檔案對話方塊標題 60 fileDialog->setWindowTitle(tr("開啟圖片")); 61 //設定預設檔案路徑 62 fileDialog->setDirectory("."); 63 //設定檔案過濾器 64 fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)")); 65 //設定可以選擇多個檔案,預設為只能選擇一個檔案QFileDialog::ExistingFiles 66 fileDialog->setFileMode(QFileDialog::ExistingFiles); 67 //設定檢視模式 68 fileDialog->setViewMode(QFileDialog::Detail); 69 //列印所有選擇的檔案的路徑 70 if(fileDialog->exec()) 71 { 72 fileNames = fileDialog->selectedFiles(); 73 showImageList(); 74 } 75 for(auto tmp:fileNames) 76 qDebug()<<tmp<<endl; 77 } 78 /**************************************** 79 * Qt中使用檔案選擇對話方塊步驟如下: 80 * 1. 定義一個QListWidget物件 81 * 2. 設定ViewMode等屬性 82 * 3. 定義單元項並新增到QListWidget中 83 * 4. 呼叫QListWidget物件的show()方法 84 *****************************************/ 85 void mymenu::showImageList() 86 { 87 //定義QListWidget物件 88 QListWidget *imageList = new QListWidget; 89 imageList->resize(365,400); 90 //設定QListWidget的顯示模式 91 imageList->setViewMode(QListView::IconMode); 92 //設定QListWidget中單元項的圖片大小 93 imageList->setIconSize(QSize(100,100)); 94 //設定QListWidget中單元項的間距 95 imageList->setSpacing(10); 96 //設定自動適應佈局調整(Adjust適應,Fixed不適應),預設不適應 97 imageList->setResizeMode(QListWidget::Adjust); 98 //設定不能移動 99 imageList->setMovement(QListWidget::Static); 100 for(auto tmp : fileNames) 101 { 102 //定義QListWidgetItem物件 103 QListWidgetItem *imageItem = new QListWidgetItem; 104 //為單元項設定屬性 105 imageItem->setIcon(QIcon(tmp)); 106 //imageItem->setText(tr("Browse")); 107 //重新設定單元項圖片的寬度和高度 108 imageItem->setSizeHint(QSize(100,120)); 109 //將單元項新增到QListWidget中 110 imageList->addItem(imageItem); 111 } 112 //顯示QListWidget 113 imageList->show(); 114 }
main.cpp
1 #include "mymenu.h" 2 #include <QApplication> 3 #include <QProcess> 4 #include <QMessageBox> 5 int main(int argc, char *argv[]) 6 { 7 QApplication a(argc, argv); 8 mymenu m_menu; 9 m_menu.show(); 10 return a.exec(); 11 }