Frage

Ich bin mit einem benutzerdefinierten Delegaten QDoubleSpinBoxes in einem QTableView anzuzeigen. Diese Spinnboxen zeigen ihre Inhalte mit zwei Dezimalstellen.

Mein Problem ist, dass ich die QTableView möchte auch diese Zahlen mit zwei Dezimalstellen angezeigt werden, während sie nicht bearbeitet werden (an welchem ??Punkt sie sind nicht in einem QDoubleSpinBox). Oder besser gesagt, ich möchte in der Lage sein, ein Format specifiy für die QTableView Inhalt.

Ich habe versucht, QStyledItemDelegate Unterklasse displaytext außer Kraft zu setzen, aber für einen seltsamen Grund stürzt. Es funktioniert richtig, wenn ich einfach QItemDelegate Unterklasse.

Ich bin mit Qt 4.6.3 unter Windows.

War es hilfreich?

Lösung

Ich bin nicht wirklich sicher, was der Ausnahme machen Sie bekommen. Hier ist ein einfaches QStyledItemDelegate, dass wir ohne Probleme verwenden. Vielleicht gibt es etwas anderes?

#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());
}

Andere Tipps

Nun, ich weiß nicht, was passiert ist, aber jetzt ist es nicht mehr abstürzt. Und es funktioniert jetzt.

Für das Protokoll, das ist meine displaytext-Methode:

QString sqxSpinBoxDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
    return locale.toString(value.toDouble(), 'f', Decimals);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top