在QTableView中格式化数据
问题描述:
我正在使用自定义委托在QTableView中显示QDoubleSpinBoxes。这些旋转框以两位小数显示其内容。在QTableView中格式化数据
我的问题是,我想QTableView也显示那些数字有两位小数,而他们没有被编辑(在这一点上,他们不在QDoubleSpinBox)。或者,我想能够为QTableView的内容指定一个格式。
我试图继承QStyledItemDelegate来覆盖displayText,但是因为一个奇怪的原因它崩溃了。它工作正常,如果我只是继承QItemDelegate。
我在Windows上使用Qt 4.6.3。
答
我真的不知道,使您得到异常的东西。这是一个我们正在使用的简单的QStyledItemDelegate,没有问题。也许有什么不同?
#include "model_view/color_combo_delegate.h"
#include <QTimer>
#include "map_elements/common/color_combo_box.h"
ColorComboDelegate::ColorComboDelegate(QObject *parent)
: QStyledItemDelegate(parent) {
}
QWidget *ColorComboDelegate::createEditor(
QWidget *parent,
const QStyleOptionViewItem & /*option*/,
const QModelIndex & /*index*/) const {
ColorComboBox *color_combo_box = new ColorComboBox(parent);
connect(color_combo_box, SIGNAL(currentIndexChanged(int)),
this, SLOT(IndexChanged()));
QTimer::singleShot(0, color_combo_box, SLOT(Popup()));
return color_combo_box;
}
QString ColorComboDelegate::displayText(const QVariant &value,
const QLocale &/*locale*/) const {
Map::Color color = static_cast<Map::Color>(value.toInt());
return Map::color_name(color);
}
void ColorComboDelegate::IndexChanged() {
ColorComboBox *color_combo_box = qobject_cast<ColorComboBox *>(sender());
emit commitData(color_combo_box);
emit closeEditor(color_combo_box);
}
void ColorComboDelegate::setEditorData(QWidget * editor,
const QModelIndex & index) const {
ColorComboBox *color_combo_box = qobject_cast<ColorComboBox *>(editor);
Map::Color color = static_cast<Map::Color>(index.data().toInt());
color_combo_box->set_color(color);
}
void ColorComboDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,
const QModelIndex &index) const {
ColorComboBox *color_combo_box = qobject_cast<ColorComboBox *>(editor);
model->setData(index, color_combo_box->color());
}
+0
在那里,不妨接受它,因为你的帮助。 – 2010-09-24 15:21:12
答
嗯,我不知道发生了什么,但现在它不再崩溃。现在它工作。
根据记录,这是我的displayText方法:
QString sqxSpinBoxDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
return locale.toString(value.toDouble(), 'f', Decimals);
}
你在描述什么应该工作。 (我们做了类似的事情。)你有关于坠毁的更多信息吗? – 2010-09-24 13:09:18
“0xC0000005:访问冲突写入位置0x00000018”。崩溃发生在QBasicAtomicInt :: deref中,但奇怪的是,在堆栈跟踪中,下面有两个调用,有一个调用QItemDelegate :: paint。但我正在使用QStyledItemDelegate ... – 2010-09-24 13:31:15