qtableviewでデータをフォーマットします
-
05-10-2019 - |
質問
QTableViewにQDoublespinboxを表示するためにカスタムデリゲートを使用しています。これらのスピンボックスは、2つの小数でコンテンツを表示します。
私の問題は、QtableViewが編集されていない間に2つの小数のある数字を表示したいということです(その時点でQDoublespinboxにはありません)。または、むしろ、QtableViewのコンテンツの形式を指定できるようにしたいと思います。
DisplayTextをオーバーライドするためにQSTyLedItemDelegateをサブクラス化しようとしましたが、奇妙な理由でクラッシュしました。 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());
}
他のヒント
まあ、私は何が起こったのかわかりませんが、今はクラッシュしなくなりました。そして今それは機能します。
記録のために、これは私のdisplayTextメソッドです:
QString sqxSpinBoxDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
return locale.toString(value.toDouble(), 'f', Decimals);
}
所属していません StackOverflow