Создал свой делегат на основе ComboBox. Для нормальной работы с БД хочу привинтить к нему сигнал before_update и after_update.
C++ (Qt)
class ComboBoxDelegateCaption : public QItemDelegate
{
Q_OBJECT
public:
ComboBoxDelegateCaption(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
QVariant tvalue;
signals:
void beforeChange(int);
private:
QSqlQueryModel *DelegateModel;
};
void ComboBoxDelegateCaption::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QComboBox *comboBox = qobject_cast<QComboBox*>(editor);
QVariant value = comboBox->model()->index(comboBox->currentIndex(), 0).data();
tvalue = value;
emit beforeChange(123);
model->setData(index, value, Qt::EditRole);
};
При сборке возникает ошибка:
delegateComboBox.cpp:146: error: passing 'const ComboBoxDelegateCaption' as 'this' argument of 'void ComboBoxDelegateCaption::beforeChange(int)' discards qualifiers
Что я делаю не так?
error: passing 'const QVariant' as 'this' argument of 'QVariant& QVariant::operator=(const QVariant&)' discards qualifiers. Не хочет 'const QVariant' присваивать QVariant. Но почему он тогда присваивает value значение? И как в данном случае сохранить значение в классе?