Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用
Qt. Method displayText() doesn't work if I defined paint() method in 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;
最后一个方法-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);
}
}
相关文章:
- 在方法定义中显式指定命名空间
- 没有针对完全专用模板类的外联虚拟方法定义
- 将虚拟方法定义为私有方法时会发生什么情况?
- 单独的类声明和方法定义文件问题
- Eclipse CDT 不了解方法定义是什么
- C 方法定义具有模板
- Eclipse CDT将方法定义定义到标头文件
- 模板方法定义的问题 - 错误C2244:无法将函数定义与现有声明匹配
- 如何为 Product* getProductFromID(std::string)编写方法定义;.
- gdb 中的方法定义没有源代码
- 方法定义中的错误"passing const List<int> as this argument discards qualifiers"
- Sendmessage在方法定义内部无法正常工作
- C 公共方法定义后定义
- C++模板方法定义在类中不匹配
- 为什么通用模板方法定义与模板类专用化不匹配?
- 方法定义中的C++模板参数
- C++方法定义和变量声明
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- 未为非访问器方法定义C++类属性
- 无法将一个类的方法定义为另一个类的好友