Я создал SpinBoxDelegate
для tableView. Когда я редактирую целочисленное значение (QVariant) в таблице, editorWidget
ведет себя как QDoubleSpinbox
, хотя это QSpinBox
.
Я использую QT 5.5.1
не текущую версию, и я взял код для делегата из документации Qt
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option
*/,
const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setFrame(false);
/*editor->setMinimum(0);
editor->setMaximum(100);*/
return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
int value = index.model()->data(index, Qt::EditRole).toInt();
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}
Я хочу, чтобы отображаемый виджет не имел десятичных знаков.
Это был код, вызывающий проблему ... Поскольку значение в QVariant было не целым числом, а двойным, я никогда не выделял делегата ...
for(int col = 1; col < mModel->columnCount() ;col++){
QVariant::Type colType = mModel->data(mModel->index(0,col), Qt::DisplayRole).type();
switch(colType){
case QVariant::Int:
ui->tableView->setItemDelegateForColumn(col, sbDelegate);
break;
case QVariant::String:
break;
case QVariant::Double:
break;
default: break;
}
}