...таблица представляет собой массив географических координат какого-то линейного объекта, который отрисовывается на экране, поэтому было бы удобней видеть изменения координат прямо на экране непосредственно на момент редактирования...
..на данном этапе я нашел решение =>
C++ (Qt)
ItemBLDelegate::ItemBLDelegate(QObject *parent /*= 0*/ ) : QItemDelegate(parent) { }
ItemBLDelegate::~ItemBLDelegate() { }
QWidget* ItemBLDelegate::createEditor( QWidget *parent,
const QStyleOptionViewItem &style, const QModelIndex &index ) const
{
int column = index.column();
int row = index.row();
if (column == 0)
{
QString currentText = index.model()->data(index, Qt::EditRole).toString();
BLEditSpinBox *editor = new BLEditSpinBox(BLEditSpinBox::Breadth, parent);
editor->setFrame(false);
return editor;
}
if(column == 1)
{
QString currentText = index.model()->data(index, Qt::EditRole).toString();
BLEditSpinBox *editor = new BLEditSpinBox(BLEditSpinBox::Longitude, parent);
editor->setFrame(false);
return editor;
}
return QItemDelegate::createEditor(parent, style, index);
}
void ItemBLDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
{
BLEditSpinBox *isEditor = qobject_cast<BLEditSpinBox *>(editor);
if (isEditor)
{
isEditor->setValueFromText(index.model()->data(index, Qt::EditRole).toString());
connect(editor, SIGNAL(valueChanged(double)), SLOT(slotValueChanged(double)));
// adding connecting
}
else
QItemDelegate::setEditorData(editor, index);
}
void ItemBLDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
{
BLEditSpinBox *isEditor = qobject_cast<BLEditSpinBox *>(editor);
if (isEditor)
model->setData(index, isEditor->text());
else
QItemDelegate::setModelData(editor, model, index);
}
void ItemBLDelegate::slotValueChanged( double d )
{
BLEditSpinBox *isEditor = qobject_cast<BLEditSpinBox *>(sender());
if (isEditor)
emit commitData(isEditor);
}
...это решение работает, но по окончании редактирования дублируется сигнал (можно ввести флаг: взводить его в slotValueChanged(), перед посылкой сигнала, а сбрасывать после обработки сигнала)