9

この省略にはやや当惑しますが、Qt のQAbstractItemViewクラスでは、メソッドを使用してQAbstractItemDelegate (つまり、QItemDelegateまたはQStyledItemDelegate ) をビュー全体、単一の行、または単一の列に設定することができsetItemDelegate*ます。さらに、個々のセルのアイテム デリゲートは、QAbstractItemView::itemDelegate(const QModelIndex&)行、列のデリゲートとともに でクエリできます。そして全景。しかし、アイテム デリゲートを個々のセルに設定する方法はないようです。何か不足していますか?これが必要な理由は何ですか?

4

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