でカスタム ウィジェットのレンダリングを実装するのに問題がありQListView
ます。現在、に基づいてQListView
呼び出されたカスタム モデルを表示しています。PlayQueue
QAbstractListModel
これは単純なテキストでは問題なく機能しますが、各要素のカスタム ウィジェットを表示したいと考えています。したがって、次のようにメソッドQStyledItemDelegate
を実装するためにa をサブクラス化しました。paint
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
QWidget *widget = new QPushButton("bonjour");
widget->render(painter);
}
選択した背景は適切にレンダリングされますが、ウィジェットは表示されません。Qtの例のような簡単なQPainter
コマンドで試してみましたが、これはうまくいきます:
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.highlightedText().color());
painter->setFont(QFont("Arial", 10));
painter->drawText(option.rect, Qt::AlignCenter, "Custom drawing");
}
だから私は次のようないくつかの変更を試みました:
QStyledItemDelegate
に変更QItemDelegate
- レンダリングの追加
painter->save()
と周辺painter->restore()
- ウィジェット ジオメトリを使用可能なサイズに設定する
しかし、私は少し立ち往生しています。インターネットでしばらく検索しましたが、私が望むことを実行する例が見つかりません。それらはすべて、ウィジェットの編集 (はるかに簡単です) またはカスタム描画コントロール (事前定義されたもの) について話します、進行状況バーなど)。しかし、ここでは、いくつかのレイアウト、ラベル、およびピックスマップを含む、作成したカスタム ウィジェットが本当に必要です。ご協力いただきありがとうございます!
Ubuntu 11.04 で GCC に Qt 4.7.3 を使用しています。