首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt。方法displayText()不能工作,如果我在QStyledItemDelegate中定义了QStyledItemDelegate()方法

Qt。方法displayText()不能工作,如果我在QStyledItemDelegate中定义了QStyledItemDelegate()方法
EN

Stack Overflow用户
提问于 2017-02-19 10:21:24
回答 1查看 792关注 0票数 0

这是我的问题:

我有一个从QStyledItemDelegate派生的委托,其中我定义了方法

代码语言:javascript
复制
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()- -让我在西班牙语区域设置数字输出的格式,它工作得很好。

但是,在此之后,我从第一个委托的继承中创建另一个委托。在这个类中,我只定义了下面的方法:

代码语言:javascript
复制
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():

代码语言:javascript
复制
QString Delegado::displayText(const QVariant & value, const QLocale & locale) const
{
    qDebug()<<"Valor: "<<value.toString()<<"locale - "<<locale;
    return locale.toString(value.toDouble(),'f',2);
}

派生类中的画图()和sizeHint() (我尝试在基类中实现这些方法,结果是相同的)

代码语言:javascript
复制
    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();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-20 22:16:25

这是我的解决方案。它起作用了,但我不知道这样做是否正确。首先,我在Delegado中定义了displayText()方法(从QStyledItemDelegate派生)。这是我的基类,它让我得到我的地区格式的数字。

之后,在Delegado2 (从Delegado派生的)中,我定义了()和sizeHint()方法。使用displayText()方法绘制文本,如下所示:

代码语言:javascript
复制
painter->drawText(option.rect, Qt::AlignCenter|Qt::AlignRight, displayText(index.data(),QLocale::system()));

这是基类(Delegado)中的displayText()方法:

代码语言:javascript
复制
QString Delegado::displayText(const QVariant & value, const QLocale & locale) const
{
    return locale.toString(value.toDouble(),'f',2);
}

这是派生类(Delegado2)中的()方法。

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42326065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档