說在 前邊
我們都知道,將圖標寫入到應用程序中比較容易,可有時候需要獲取某個應用的圖標,我們該怎麼讀取呢?當然是有辦法的。
引入
Qt給了例子:
static PixmapEntryList extractIcons(const QString &sourceFile, bool large)
從中可以知道真正起作用的是這兩個函數:
ExtractIconEx();
QtWin::fromHICON()
第一個用於獲取應用程序的圖標數據,第二個用於轉換圖片格式。
新建工程並調整界面
編寫提取函數
獲取應用圖標個數:
const UINT iconCount = ExtractIconEx(exefile, -1, 0, 0, 0);
獲取實際提取的圖標個數:
const UINT extractedIconCount =
ExtractIconEx(file, 0, icons.data(), 0, iconCount)
如果需要提取小圖標則可以這樣寫:
ExtractIconEx(file, 0, 0, icons.data(), iconCount)
轉換格式:
QPixmap(QtWin::fromHICON(icons[i]))
編寫調用函數
獲取多文件:
QStringList s=QFileDialog::getOpenFileNames(this,"file","","*.exe");
對每個文件進行提取:
foreach(QString ss,s){
ico2Pixmap(ss);
}
添加到列表:
ui->listWidget->addItems(s);
顯示圖標:
foreach (QPixmap p, mpList) {
QLabel *l=new QLabel(this);
l->setPixmap(p);
ui->gridLayout->addWidget(l);
}
保存到本地文件
void DeskAssist::on_save_clicked()
{
int i=1;
foreach (QPixmap p, mpList) {
p.save(QString("%1.png").arg(i++));
}
QMessageBox::information(this,"Save","Success!");
}
到這裡 已經結束。
閱讀更多 愛生活Favorite 的文章