Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用

Qt. Method displayText() doesn't work if I defined paint() method in QStyledItemDelegate

本文关键字:方法 定义 不起作用 QStyledItemDelegate paint 显示 文本 如果 Qt      更新时间:2023-10-16

这是我的问题:

我有一个来自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()和paint())int同一类,则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);
}

paint()和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();
    }

这是我的解决方案。它有效,但我不知道这种方式是正确的。首先,我在delegado中定义了displayText()方法(衍生自QStyleDitemdelegate)。这是我的基础课,让我以我的语言环境格式获得数字。

thar之后,在delegado2(源自delegado)中,我定义了paint()和sizehint()方法。Paint()使用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)

中的Paint()方法
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);
    }
}