2012-03-11 69 views
0

我寫了一個循環,其中添加了一些項目到我的QListWidget。現在我想讓他們從我的qrc文件中獲得一個圖標。爲此,我將使用一個循環,爲每個項目添加一個獨特的圖標。將數組中的圖標添加到QListWidget項目

void Test::Query() 
{ 
    ui->listWidget_Available->clear(); 

    QString CmdList[4] = {"kcmshell4 --list|grep -q kcm_grub2", 
         "kcmshell4 --list|grep -q kcm_networkmanagement", 
         "which pastebunz", 
         "[ -z $ink3_ver ]"}; 
    QString NameList[4] = {"kcm_grub2", 
         "kcm_networkmanagement", 
         "pastebunz", 
         "Shellmenu"}; 
    QString IconList[4] = {":/icons/icons/GNU.png", 
         ":/icons/icons/networkmanager.png", 
         ":/icons/icons/edit-paste.png", 
         ":/icons/icons/menu.png"}; 

QIcon ItemIcon; 
int iCntSize = sizeof(CmdList)/sizeof(CmdList[0]); 

接下來的事情是清除列表:

for(int iItem = 0; iItem < iCntSize; iItem++) 
{ 
    ui->listWidget_Available->addItem(NameList[iItem]); 
    ui->listWidget_Available->item(iItem)->setCheckState(Qt::PartiallyChecked); 
} 

現在醜陋的部分:

for(int iRow = 0; iRow < iCntSize; iRow++) 
{ 
    int BarValue = ui->progressBar->value(); 
    ui->progressBar->setValue(BarValue+(100/iCntSize)); 

    QString status = QString("Processing index %1 of %2. Name: %3").arg(iRow).arg(iCntSize).arg(NameList[iRow]); 
    qDebug() << status << (BarValue+25); 

,這裏是我的問題:

ItemIcon.addFile(IconList[iRow], QSize(), QIcon::Normal, QIcon::Off); 
    ui->listWidget_Available->item(iRow)->setIcon(ItemIcon); <--- how to do THIS? 

我怎麼能做這個?

ui->textEdit_Informations->append("Searching for "+NameList[iRow]); 
    mProcess = new QProcess(); 
    mProcess->start("/bin/bash", QStringList() << "-c" << QString(CmdList[iRow])); 
    mProcess->waitForFinished(); 

    if (mProcess->exitStatus() == QProcess::CrashExit) 
    { 
     ui->textEdit_Informations->setTextColor(Qt::red); 
     ui->textEdit_Informations->append("\t[FATAL]"); 
    } 
    else if (mProcess->exitCode() != 0) 
    { 

     ui->textEdit_Informations->setTextColor(Qt::magenta); 
     ui->textEdit_Informations->append("\t[MISSED]"); 
     ui->listWidget_Available->item(iRow)->setCheckState(Qt::Unchecked); 
    } 
    else if (mProcess->exitCode() == 0) 
    { 
     ui->textEdit_Informations->setTextColor(Qt::green); 
     ui->textEdit_Informations->append("\t[FOUND]"); 
     ui->listWidget_Available->item(iRow)->setCheckState(Qt::Checked); 
    } 
    ui->textEdit_Informations->setTextColor(Qt::white); 
} 
} 

有什麼建議嗎?

回答

1

你應該使用構造函數和一個新的QIcon每一次不是QIcon::addFile

QIcon ItemIcon(IconList[iRow]); 
ui->listWidget_Available->item(iRow)->setIcon(ItemIcon); 

addFile如果你曾經爲圖標在項目的每個狀態不同的圖像只會是有用的(正常,激活,禁用...)。