この省略にはやや当惑しますが、Qt のQAbstractItemViewクラスでは、メソッドを使用してQAbstractItemDelegate (つまり、QItemDelegateまたはQStyledItemDelegate ) をビュー全体、単一の行、または単一の列に設定することができsetItemDelegate*
ます。さらに、個々のセルのアイテム デリゲートは、QAbstractItemView::itemDelegate(const QModelIndex&)
行、列のデリゲートとともに でクエリできます。そして全景。しかし、アイテム デリゲートを個々のセルに設定する方法はないようです。何か不足していますか?これが必要な理由は何ですか?
質問する
12184 次
2 に答える
5
いいえ、1 つのセルまたは 1 つの列だけにアイテム デリゲートを設定することはできませんが、ウィジェット全体にアイテム デリゲートを簡単に設定して、カスタム ペインティングなどを使用するセル、列、または行を選択できます。
例えば
void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (index.column() == 1)
{
// ohh it's my column
// better do something creative
}
else // it's just a common column. Live it in default way
QItemDelegate::paint(painter, option, index);
}
ここでさらに詳しい情報を見つけることができます
于 2013-03-15T21:06:46.100 に答える
2
代わりに createEditor 関数を再実装することをお勧めします。
QWidget * WidgetDelegate::createEditor(
QWidget *parent,
const QStyleOptionViewItem &,
const QModelIndex &index) const
{
QWidget *widget = 0;
if (index.isValid() && index.column() < factories.size())
{
widget = factories[index.column()]->createEditor(index.data(Qt::EditRole).userType(), parent);
if (widget)
widget->setFocusPolicy(Qt::WheelFocus);
}
return widget;
}
于 2015-01-14T15:10:55.293 に答える