寫一個提取應用圖標的工具

說在 前邊

我們都知道,將圖標寫入到應用程序中比較容易,可有時候需要獲取某個應用的圖標,我們該怎麼讀取呢?當然是有辦法的。

引入

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!");

}

寫一個提取應用圖標的工具

到這裡 已經結束。


分享到:


相關文章: