Это моя проблема:Qt. Метод DisplayText() не работает, если я определил краску() метод в QStyledItemDelegate
У меня есть делегат, полученный из QStyledItemDelegate, где я определил методы
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem&option, const QModelIndex&index) const;
void setEditorData(QWidget * editor, const QModelIndex&index)const;
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex&index) const;
QString displayText(const QVariant & value, const QLocale & locale) const;
Последних method -displayText() - Позвольте мне форматировать вывод чисел в испанском языке, и он отлично работает.
Но после этого я создаю другого делегата из наследования первого делегата. В этом классе я только определить следующие методы:
void paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
И проблема в том, что столбцы, где работает тот делегат, не показывают номера хорошо отформатированные как DisplayText() должно быть сделать.
Таким же образом, если я определил оба этих метода (displayText() и paint()) в том же классе, displayText() не работает.
Редактировать:
Эти реализации методов:
DisplayText() в базовом классе:
QString Delegado::displayText(const QVariant & value, const QLocale & locale) const
{
qDebug()<<"Valor: "<<value.toString()<<"locale - "<<locale;
return locale.toString(value.toDouble(),'f',2);
}
краски() и sizeHint() в производном классе (я попытались реализовать эти методы в базовом классе, и результаты те же)
void Delegado2::paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.isValid())
{
painter->save();
painter->setPen(QColor(255,255,170));
painter->setBrush(QColor(255,255,170));
painter->drawRect(option.rect);
painter->setPen(Qt::gray);
painter->drawText(option.rect, Qt::AlignCenter, QString::number(index.data().toDouble()));
painter->restore();
QStyledItemDelegate::paint(painter, option, index);
}
else
QStyledItemDelegate::paint(painter, option, index);
}
QSize Delegado2::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
return option.rect.size();
}
вы называете родительский класс QStyledItemDelegate :: краска() осуществление внутри вашей реализации краски? –
Да. Даже если методы paint() и dispayText() находятся в одном классе, displayText() не работает. – user3733164
Просьба предоставить реализацию метода paint() и displayText() –