qt — Qt5 C ++: установить делегат Spinbox для определенного столбца таблицы

Я пытаюсь добавить делегата элемента spinbox в определенный столбец в моей таблице. После просмотра примера в Qt я скопировал большую часть этого кода и реализовал его, но когда я звоню setItemDelegateForColumn() мое приложение вылетает. Индекс столбца действителен. Есть идеи, что я сделал не так?

Основной метод вызова:

BinarySpinboxDelegate binarySpinboxDelegate;
ui->UsersTable->setItemDelegateForColumn(users->at(0).size()-1 ,&binarySpinboxDelegate);

Пользовательская реализация Spinbox:

#include "binaryspinboxdelegate.h"#include <QSpinBox>

BinarySpinboxDelegate::BinarySpinboxDelegate(QObject *parent) : QStyledItemDelegate(parent)
{

}

QWidget* BinarySpinboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
{
QSpinBox* editor = new QSpinBox(parent);
editor->setFrame(false);
editor->setMinimum(0);
editor->setMaximum(1);

return editor;
}

void BinarySpinboxDelegate::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 BinarySpinboxDelegate::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);
}

void BinarySpinboxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
{
editor->setGeometry(option.rect);
}

0

Решение

И я идиот. Оказывается, я был достаточно глуп, чтобы объявить делегата внутри функции инициализации таблицы, которая затем выходит из области видимости после завершения функции. Переместил его в заголовочный файл, чтобы он существовал на протяжении всего срока службы объекта, и все было в порядке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]