Форматирование данных в QTableView - PullRequest
1 голос
/ 24 сентября 2010

Я использую пользовательский делегат для отображения QDoubleSpinBoxes в QTableView. Эти спин-боксы отображают их содержимое с двумя десятичными знаками.

Моя проблема в том, что я хотел бы, чтобы QTableView также отображал эти числа с двумя десятичными знаками, пока они не редактируются (в этот момент их нет в QDoubleSpinBox). Или, скорее, я хотел бы иметь возможность указать формат для содержимого QTableView.

Я попытался создать подкласс QStyledItemDelegate для переопределения displayText, но по странной причине он вылетает. Это работает правильно, если я просто подкласс QItemDelegate.

Я использую Qt 4.6.3 для Windows.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Я не совсем уверен, что делать с исключением, которое вы получаете.Вот простой 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 голосов
/ 24 сентября 2010

Ну, я не знаю, что случилось, но теперь это больше не падает.И теперь это работает.

Для записи, это мой метод displayText:

QString sqxSpinBoxDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
    return locale.toString(value.toDouble(), 'f', Decimals);
}
...