2010-09-24 94 views
1

我正在使用自定義委託在QTableView中顯示QDoubleSpinBoxes。這些旋轉框以兩位小數顯示其內容。在QTableView中格式化數據

我的問題是,我想QTableView也顯示那些數字有兩位小數,而他們沒有被編輯(在這一點上,他們不在QDoubleSpinBox)。或者,我想能夠爲QTableView的內容指定一個格式。

我試圖繼承QStyledItemDelegate來覆蓋displayText,但是因爲一個奇怪的原因它崩潰了。它工作正常,如果我只是繼承QItemDelegate。

我在Windows上使用Qt 4.6.3。

+0

你在描述什麼應該工作。 (我們做了類似的事情。)你有關於墜毀的更多信息嗎? – 2010-09-24 13:09:18

+0

「0xC0000005:訪問衝突寫入位置0x00000018」。崩潰發生在QBasicAtomicInt :: deref中,但奇怪的是,在堆棧跟蹤中,下面有兩個調用,有一個調用QItemDelegate :: paint。但我正在使用QStyledItemDelegate ... – 2010-09-24 13:31:15

回答

1

我真的不知道,使您得到異常的東西。這是一個我們正在使用的簡單的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

0

嗯,我不知道發生了什麼,但現在它不再崩潰。現在它工作。

根據記錄,這是我的displayText方法:

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