c++ - 将图标从数组添加到 QListWidget 项目

标签 c++ qt qt4 qt-creator qt4.8

我编写了一个循环,它向我的 QListWidget 添加了一些项目。现在我希望他们有一个来 self 的 qrc 文件的图标。为此,我将使用一个循环,在该循环中我为每个项目添加一个唯一的图标。

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:

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

addFile 仅在您为图标所处项目的每种状态(正常、激活、禁用...)设置不同图像时才有用。

关于c++ - 将图标从数组添加到 QListWidget 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659604/

相关文章:

c++ - 生成组合虚拟按键以获取 â、ó、ć 等更复杂的字符

c++ - 使用 QUdpSocket 作为 QIODevice

c++ - 如何从成员 QThread 更改 QMainWindow 上的 Qt GUI 小部件?

c++ - 用于 Qt C++ 开发的模型 View 展示器

qt4 - Qt 应用程序无法正确调整大小

c++ - 是否有适用于 C++ 的 'out-of-the-box' 2D/3D 绘图库?

c++ - 带有 C++ 对象作为属性的 Objective C ViewController 具有 getter 和 setter,每次引用它时都会重新初始化它

c++ - scons:对象、源代码、可执行文件,都在单独的目录中

c++ - 在 linux 中播放 wav 文件

c++ - 如何向 moc_predefs.h 添加定义?