将数组中的图标添加到QListWidget项 [英] Add icon from array to QListWidget item

查看:593
本文介绍了将数组中的图标添加到QListWidget项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个循环,其中添加了一些项目到我的 QListWidget 。现在我想他们有一个来自我的qrc文件的图标。为此,我将使用一个循环,其中我为每个项目添加一个唯一的图标。

I've written a loop which adds some items to my QListWidget. Now I want them to have an icon from my qrc file. For this I would use a loop in which I add a unique icon to each item.

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);
}
}

有任何建议吗?

推荐答案

每次都应该使用构造函数和一个新的 QIcon ,而不是 QIcon :: addFile

You should use the constructor and a new QIcon each time instead of QIcon::addFile:

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

addFile (正常,激活,禁用,...)的每个状态的不同图像。

addFile would only be useful if you had a different image for each state of the item the icon is in (normal, activated, disabled, ...).

这篇关于将数组中的图标添加到QListWidget项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆