9

这个遗漏相当令人困惑——但在 Qt 的QAbstractItemView类中,可以使用这些方法将QAbstractItemDelegate(即QItemDelegateQStyledItemDelegate)设置为整个视图、单行或单列setItemDelegate*。此外,可以查询单个单元格的项目委托QAbstractItemView::itemDelegate(const QModelIndex&),以及行、列的委托。和整个视图。但似乎没有办法将项目委托设置为单个单元格。我错过了什么吗?这应该是什么原因?

4

2 回答 2

5

不,您不能只为一个单元格或一列设置项目委托,但您可以轻松地为整个小部件设置项目委托,并选择要在哪个单元格、列或行中使用自定义绘画或其他内容。

例如

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 回答