7

QListView と QStandardItemModel を使用して、関連するテキストを表示せずにリスト ビューにアイコンを表示することは可能ですか? QStandardItem は次のように定義されています。

QStandardItem ( const QIcon & icon, const QString & text ) 

したがって、何らかのテキスト文字列が必要なようです-アイコンを表示するだけです。次のコードを使用すると、要求どおりにアイコンが表示されますが、その下に空白のテキスト要素も表示されます。私はこれをしたくありません。

ImageListView->setViewMode( QListView::IconMode );
{
     QStandardItemModel *iStandardModel = new QStandardItemModel(this);
     QStandardItem* item1 = new QStandardItem(QIcon("images/shield-280x280.png"),"");
     QStandardItem* item2 = new QStandardItem(QIcon("images/shield-280x280.png"),"");

     iStandardModel->appendRow(item1);
     iStandardModel->appendRow(item2);
     ImageListView->setIconSize(QSize(100,100));
     ImageListView->setUniformItemSizes(true);
     ImageListView->setDragDropMode(QAbstractItemView::DropOnly);
     ImageListView->setModel(iStandardModel);
}

せっかくカスタムモデルを作ったら、この問題は解決できますか?

4

2 に答える 2

5

受け入れられた回答を拡張するために、オプションでアイテムのテキスト(表示ロール)を非表示にできる最も単純なデリゲートを次に示しますが、それ以外はデフォルトのデリゲートのように機能します。これは、任意のQAbstractItemViewサブクラス (および QComboBox) および任意のQAbstractItemModelサブクラスでも機能します。また、他のビュー (または何らかの理由) で表示ロールを非 null に保ちたい場合は、より良い解決策です。

class ItemDelegate : public QStyledItemDelegate
{
  public:
    using QStyledItemDelegate::QStyledItemDelegate;

    // simple public member to toggle the display role (create getter/setter if you prefer)
    bool displayRoleEnabled = false;

  protected:
    void initStyleOption(QStyleOptionViewItem *o, const QModelIndex &idx) const override
    {
      QStyledItemDelegate::initStyleOption(o, idx);
      // to hide the display role all we need to do is remove the HasDisplay feature
      if (!displayRoleEnabled)
        o->features &= ~QStyleOptionViewItem::HasDisplay;
    }
};
于 2020-02-29T00:52:39.680 に答える
3

はい、できます。

まず、リストビューに関連付けられたデリゲートを作成します。次に、

リストビューに要素を挿入するときに、set-data 関数を使用してアイコンを挿入し、デリゲートのペイント イベントで描画アイコンを処理します。明確であることを願っています。

于 2010-04-08T04:56:08.027 に答える