Как установить делегат для отдельной ячейки в представлении элемента Qt?

Скорее озадачен этим упущением — но в Qt’s QAbstractItemView класс, можно установить QAbstractItemDelegate (Т.е. QItemDelegate или же QStyledItemDelegate) ко всему представлению, одной строке или одному столбцу, используя setItemDelegate* методы. Кроме того, делегат элемента для отдельной ячейки может быть запрошен, с QAbstractItemView::itemDelegate(const QModelIndex&)вместе с делегатом для строк, столбцов. и весь вид. Но, похоже, нет никакого способа задавать делегат элемента в отдельную ячейку. Я что-то пропустил? По какой причине это должно быть?

6

Решение

Нет, вы не можете установить делегирование элемента только для одной ячейки или одного столбца, но вы можете легко установить делегирование элемента для всего виджета и выбрать, в какой ячейке, столбце или строке вы хотите использовать свою собственную картину или что-то еще.

Например,

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

Вы можете найти больше информации Вот

5

Другие решения

Я бы порекомендовал переопределить функцию 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;
}
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector