Как установить делегат для одной ячейки в представлении элемента Qt?
довольно озадачен этим упущением-но в Qt QAbstractItemView класс, можно установить QAbstractItemDelegate (т. е. QItemDelegate или QStyledItemDelegate) для всего представления, одной строки или одного столбца, используя setItemDelegate*
методы. Кроме того, делегат элемента для отдельной ячейки может быть запрошен с помощью QAbstractItemView::itemDelegate(const QModelIndex&)
, вместе с делегатом для строк, столбцов. и весь вид. Но, похоже, нет. способ set делегат элемента в отдельную ячейку. Я что-то упускаю? По какой причине это должно быть?
2 ответов
нет вы не можете установить делегат элемента только для одной ячейки или одного столбца, но вы можете легко установить делегат элемента для всего виджета и выбрать, в какой ячейке, столбце или строке вы хотите использовать свою пользовательскую картину или что-то еще.
, например,
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;
}