这是我的问题:
我有一个从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;最后一种方法是-displayText()- -让我在西班牙语区域设置数字输出的格式,它工作得很好。
但是,在此之后,我从第一个委托的继承中创建另一个委托。在这个类中,我只定义了下面的方法:
void paint( QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index ) const;
QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const;问题是,这些委托所在的列不能显示格式良好的数字(如displayText() )。
同样,如果我在同一个类中同时定义了这两个方法(displayText()和displayText() ),那么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();
}发布于 2017-02-20 22:16:25
这是我的解决方案。它起作用了,但我不知道这样做是否正确。首先,我在Delegado中定义了displayText()方法(从QStyledItemDelegate派生)。这是我的基类,它让我得到我的地区格式的数字。
之后,在Delegado2 (从Delegado派生的)中,我定义了()和sizeHint()方法。使用displayText()方法绘制文本,如下所示:
painter->drawText(option.rect, Qt::AlignCenter|Qt::AlignRight, displayText(index.data(),QLocale::system()));这是基类(Delegado)中的displayText()方法:
QString Delegado::displayText(const QVariant & value, const QLocale & locale) const
{
return locale.toString(value.toDouble(),'f',2);
}这是派生类(Delegado2)中的()方法。
void Delegado2::paint( QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (index.isValid())
{
painter->save();
painter->setPen(QColor(255,240,170));
painter->setBrush(QColor(255,240,170));
painter->drawRect(option.rect);
painter->setPen(Qt::magenta);
painter->drawText(option.rect, Qt::AlignCenter|Qt::AlignRight, displayText(index.data(),QLocale::system()));
painter->restore();
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
}https://stackoverflow.com/questions/42326065
复制相似问题