如何在Qt项目视图中设置单个单元格的委托?

这种遗漏让Quest感到困惑 - 但在Qt的QAbstractItemView类中,可以使用setItemDelegate*方法将QAbstractItemDelegate(即QItemDelegate或QStyledItemDelegate)设置为整个视图,单个行或单个列。 另外,可以使用QAbstractItemView::itemDelegate(const QModelIndex&)查询单个单元格的项目委托,以及行,列的委托。 和整个视图。 但似乎没有办法将物品代理设置到单个单元。 我错过了什么吗? 这应该是什么原因?


不,您不能为一个单元格或一列设置项目委托,但可以轻松设置整个窗口小部件的项目委托,并选择要使用自定义绘画的单元格,列或行。

例如

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);
}

你可以在这里找到更多的信息


我建议重新实现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;
}
链接地址: http://www.djcxy.com/p/78989.html

上一篇: How to set a delegate for a single cell in Qt item view?

下一篇: XCode adding duplicate and incorrect icon filenames to Info.plist