VB
Vladimir Bervin12 октября 2020 г. 5:38

Подключение делегата к представлению

Qt

Добрый день.
Изучаю документацию по моделям в Qt. Стандартный код для подключения делегата. Но почему-то данные не отображаются. Кто нибудь знает что здесь не так?

Класс SpinBoxDelegate

QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QSpinBox *editor = new QSpinBox(parent);
    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);
}

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

Класс MainWindow

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle(QObject::tr("Spin Box Delegate"));

    QStandardItemModel *model = new QStandardItemModel(4,2,ui->tableView);
     ui->tableView->setModel(model);

    SpinBoxDelegate delegate;
    ui->tableView->setItemDelegate(&delegate);

    for (int row = 0; row < 4; ++row) {
        for (int column = 0; column < 2; ++column) {
            QModelIndex index = model->index(row, column, QModelIndex());
            model->setData(index, QVariant((row+1) * (column+1)));
        }
    }

    setCentralWidget(ui->tableView);
}

Если закомментировать строчки

SpinBoxDelegate delegate;
ui->tableView->setItemDelegate(&delegate);

то данные отображаются.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

4
Дмитрий
  • 12 октября 2020 г. 10:45
  • Ответ был помечен как решение.

На сколько понял, у вас делегат создается как объект в конструкторе. и по выходу из тела конструктора он грохается. Попробуйте указатель создать.

    VB
    • 13 октября 2020 г. 4:28

    Да, действительно. Решением оказалось создать указатель.

        SpinBoxDelegate *delegate = new SpinBoxDelegate();
        ui->tableView->setItemDelegate(delegate);
    

    Но почему грохается? Я же ссылку на значение отправлял.

      ВЖ
      • 13 октября 2020 г. 6:21

      У Вас ссылка на локальный объект, который уничтожается по выходу из конструктора

        Действительно.

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь
          AD

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Результат:50баллов,
          • Очки рейтинга-4
          m
          • molni99
          • 26 октября 2024 г. 1:37

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Результат:80баллов,
          • Очки рейтинга4
          m
          • molni99
          • 26 октября 2024 г. 1:29

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Результат:20баллов,
          • Очки рейтинга-10
          Последние комментарии
          i
          innorwall11 ноября 2024 г. 22:12
          Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
          i
          innorwall11 ноября 2024 г. 18:23
          QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
          i
          innorwall11 ноября 2024 г. 15:50
          Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
          i
          innorwall11 ноября 2024 г. 14:19
          Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
          i
          innorwall11 ноября 2024 г. 13:55
          PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
          Сейчас обсуждают на форуме
          i
          innorwall11 ноября 2024 г. 20:56
          добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
          i
          innorwall11 ноября 2024 г. 10:55
          Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
          9
          9Anonim25 октября 2024 г. 9:10
          Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
          ИМ
          Игорь Максимов3 октября 2024 г. 4:05
          Реализация навигации по разделам Спасибо Евгений!

          Следите за нами в социальных сетях