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 に答える