QListView
でカスタムウィジェットレンダリングを実装するのが難しいです。 現在QListView
にというカスタムモデルが表示されています(QAbstractListModel
)。QListViewのQWidgetDelegateのpaint()メソッドでQWidgetをレンダリングする
これは単純なテキストでうまくいきましたが、各要素のカスタムウィジェットを表示したいと思います。 だから私はこのようなpaint
メソッドを実装するQStyledItemDelegate
をサブクラス化:
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
コマンドで試してみましたが、これは正常に動作している:
- は、レンダリングの周り
painter->save()
とpainter->restore()
を追加QItemDelegate
- に
QStyledItemDelegate
を変更する:
だから私のようないくつかの変更を試してみました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"); }
- ウィジェットジオメトリを使用可能なサイズに設定する
しかし、私はちょっと立ち往生していますが、インターネット上でしばらく検索しましたが、私がしたいことをやっている例は見つからず、ウィジェットを編集するのが大変簡単です。 (プログレスバーのように定義済みのもの)。 しかし、ここで私が作成したカスタムウィジェットが必要です。いくつかのレイアウト、ラベル&ピクスマップが含まれています。 ご協力いただきありがとうございます!
私はUbuntu 11.04でGCCにQt 4.7.3を使用しています。
荷降ろしをどのように行うのが最適か分かりましたか? – lyschoening
ノップ私はしていませんでした:( –