C++ 在QListWidget中使用图像,这可能吗?

C++ 在QListWidget中使用图像,这可能吗?,c++,qt,qlistwidget,C++,Qt,Qlistwidget,我正在使用QT创建聊天messenger客户端。为了显示在线用户列表,我使用了一个QListWidget,如下所示: listWidget = new QListWidget(horizontalLayoutWidget); listWidget->setObjectName("userList"); QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Expanding); sizePolicy1.setHorizon

我正在使用QT创建聊天messenger客户端。为了显示在线用户列表,我使用了一个
QListWidget
,如下所示:

listWidget = new QListWidget(horizontalLayoutWidget);
listWidget->setObjectName("userList");
QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Expanding);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(listWidget->sizePolicy().hasHeightForWidth());
listWidget->setSizePolicy(sizePolicy1);
listWidget->setMinimumSize(QSize(30, 0));
listWidget->setMaximumSize(QSize(150, 16777215));
listWidget->setBaseSize(QSize(100, 0));
listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
通过不断刷新列表来显示用户,如下所示:(注意:有不同的频道,有不同的用户列表,所以据我所知,刷新列表是最有效的方法。)

void FMessenger::refreshUserlist()
{
如果(currentPanel==0)
返回;
listWidget=this->findChild(QString(“userList”);
listWidget->clear();
QList charList=currentPanel->charList();
QListWidgetItem*charitem=0;
FCharacter*字符;
foreach(字符、字符表)
{
charitem=新的QListWidgetItem(字符->名称());
//charitem->setIcon(QIcon(:/Images/status.png”);
listWidget->addItem(charitem);
}
}
这一直都很有效。我注释掉的一行是我遇到的问题:我当前的目标是能够用一个图像显示用户的在线状态,该图像表示用户是否忙、不在、可用等。显然,使用
setIcon()
完全不起作用;这些项目仍然像以前一样显示,没有图标


我知道这可能不是这个函数需要使用的方式,但我在网上几乎找不到关于它的文档,也绝对没有有用的实现示例。我的问题是,有人能帮我解决这个问题吗?

这是您进行调试的方式:

  • 尝试同时使用图标和文本作为参数的构造函数
  • 尝试在另一个上下文中使用该图标,以确保其可显示(使用相同的参数构造一个QIcon,并在其他地方使用它,例如QLabel!)
  • 使用QListWidgetItem中的图标()接收回图标,然后查看该图标
  • 创建一个新的QListWidget,不做任何更改,通常在MainWidget的构造函数中添加一些库存项。看看图标是否显示在那里

这是否意味着您认为它应该工作,但在某个地方有一个bug?我正在权衡一些选择,其中一个是简单地尝试完全不同的东西,但似乎这是不必要的,那么?是的,它肯定会起作用。甚至QListWidget的文档也显示带有图标的项目。另请参阅这些代码示例:事实上,这相当令人尴尬。。。这个问题是由某个地方的资本化错误引起的。我通过SVN与其他一些人一起工作,很明显,资源系统的一部分是在Windows中创建的,在Windows中并不总是区分小写和大写。谢谢你的帮助!我很高兴我没有打倒整件事。
void FMessenger::refreshUserlist()
{
    if (currentPanel == 0)
        return;
    listWidget = this->findChild<QListWidget *>(QString("userList"));
    listWidget->clear();
    QList<FCharacter*> charList = currentPanel->charList();
    QListWidgetItem* charitem = 0;
    FCharacter* character;
    foreach(character, charList)
    {
        charitem = new QListWidgetItem(character->name());
        // charitem->setIcon(QIcon(":/Images/status.png"));
        listWidget->addItem(charitem);
    }
}