2

我正在使用 QT 创建聊天信使客户端。为了显示在线用户列表,我使用了一个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()
{
    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);
    }
}

这一直很完美。我注释掉的那一行是我遇到的问题:我当前的目标是能够用图像显示用户的在线状态,该图像表示他们是否忙、不在、有空等。setIcon()但使用绝对没有任何作用,显然; 这些项目仍然像以前一样显示,没有图标。

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

4

1 回答 1

3

这是您进行调试的方式:

  • 尝试将图标和文本作为参数的构造函数。
  • 尝试在另一个上下文中使用该图标以确保它是可显示的(构造一个具有相同参数的 QIcon 并在其他地方使用它,例如 QLabel!)。
  • 使用 QListWidgetItem 中的 icon() 接收图标,然后查看该 QIcon。
  • 创建一个新的 QListWidget,什么都不做,通常在 MainWidget 的构造函数中添加一些库存项目。查看图标是否显示在那里。
于 2011-02-27T23:19:20.397 回答