ДК
Джон Кофи24 ноября 2020 г. 14:45

QTableView не становится в редактирование

Привет. Есть таблица наследник от QTableView, модель от QAbstractItemModel, делегат от QStyledItemDelegate, модель фильтрации от QSortFilterProxyModel.

_userModel->getAllUsers();
_filterModel->setSourceModel(_userModel);
ui->_usersTV->setModel(_filterModel);
ui->_usersTV->setItemDelegate(_userDelegate);
ui->_usersTV->setSelectionMode(QAbstractItemView::SingleSelection);
ui->_usersTV->setEditTriggers(QAbstractItemView::AllEditTriggers);
ui->_usersTV->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::ResizeToContents);
ui->_usersTV->horizontalHeader()->setStretchLastSection(true);

Почему ячейки в такой таблице не ставятся в редактирование при любых действиях (дв клик, ентер и пр.)?
что еще тут не работает тоже не понятно почему -

connect(ui->_userTV->selectionModel(), &QItemSelectionModel::selectionChanged, this, &UserEditForm::foo);

Сигнал при смене выделенной ячейки не испускается.
Я пробовал убрать делегат и модель фильтрации, оставил только вью и модель, но это не помогло.
при использовании обычной QTableView всё также. Что за бред... что-то в модели должно быть, что стало возможно редактирование ячейки?
Поставил в модели для теста:

QVariant UserNode::data(const int column, const int role) const
{
    switch (role) {
    case Qt::EditRole:
    {
        User* entity = item().value<User*>();
        switch (column) {
        case User::SECONDNAME:
            return entity->secondName();
            break;
        }
    }
    }

    return TreeNode::data(column, role);
}

в этот кейс редактирования вообще не заходит. Значит, дело всё же во вью...

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

QSortFilterProxyModel - только сортирует данные, но не позволяет вам их изменять. Если вам необходимо сортировка данных, и при этом возможность редактирования данных, то оперируйте данными в QAbstractItemModel.
QSortFilterProxyModel

ДК

данные меняются в основной модели при использовании QSortFilterProxyModel, есть делегат к тому же, в котором переопределен setModelData. Я же отписался - пробовал и без модели фильтрации, и без делегата, всё равно в редактирование таблица не ставилась.

M

Можете показать код где Вы инициализируете QAbstractItemModel? И как он потом наследуется.

ДК

балин, вот я, конечно, "молодец". минус 5 часов, из-за того, что не поставил в модели флаги.

Qt::ItemFlags UserModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags = TreeModel::flags(index);

    TreeNode* node = static_cast<TreeNode*>(index.internalPointer());
    if(UserNode* n = dynamic_cast<UserNode*>(node))
        return flags | Qt::ItemIsEditable;
    return flags;
}

почему-то всегда думал, что они нужны только для SqlModels.
Спасибо за участие!

Комментарии

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

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
TG

C++ - Тест 001. Первая программа и типы данных

  • Результат:53баллов,
  • Очки рейтинга-4
TG

C++ - Тест 001. Первая программа и типы данных

  • Результат:60баллов,
  • Очки рейтинга-1
TN

C++ - Тест 001. Первая программа и типы данных

  • Результат:40баллов,
  • Очки рейтинга-8
Последние комментарии
t
  • t1m4
  • 23 января 2021 г. 8:28

Django - Урок 052. Переопределение модели пользователя

Добрый день, Я вот написал в admin.py admin.site.register(User, UserAdmin) Но у меня не появилось новые поля в админке?

Django - Урок 001. Развёртывание сайта на Django + PostgreSQL + Gunicorn + Nginx

Ошибка в конфиге инжинкса про статику в root последний слеш лишний путь в таком виде получается /home/user/myprojectenv/myproject/myproject//static

Qt/C++ - Урок 061. Добавление изображений в приложение методом Drag And Drop из файлового менеджера

// Вместо отрисовки иконки и текста будем отрисовывать только одно изображение // с небольшими отступами в 5 пикселей QPixmap pix(m_model->data(index).toString()); …
m
  • magrif
  • 19 января 2021 г. 12:37

Qt Сертификация

Здравствуйте. Подскажите, оплачивать ваучер прямо в выбранном тестовом центре? Можно ли загранник предъявить? Или свой паспорт, а заполнить транслитом? А то там пишут: Your name must exactl…
r
  • retmas
  • 17 января 2021 г. 4:09

Qt/C++ - Урок 074. Генерация псевдослучайных чисел с использованием случайной библиотеки STD

Дмитрий, решает. Просто автор, видимо, не сильно озаботился изучением документации QRandomGenerator. Да и в листинге с использованием qrand вызов функции qsrand на каждой итерации цикла нав…
Сейчас обсуждают на форуме
D

QScrollArea dynamically add QCheckBoxes

Привет всем участникам! Класный у вас сайт! Нашёл познавательное в сети: «Марш достоинства»: тысячи испанцев требуют социальной справедливости http://electek.ru/news/11182-marsh-dostoinstva…

Не получается prefetch_related на M2M полях

это да. и правильнее всего было бы сделать все фильтрации и только в самом конце вызвать prefetch_related например, если все это уходит в шаблон, я бы поступил следующим образом: def so…
  • BlinCT
  • 23 января 2021 г. 9:25

Правильное расположение элементов в ListView

Вся проблема в тмо что у меня репитор который должен правильно создавать по индексам эти ячейки. В случаи данной момедли 2 столбца а после засунуть туда правильный текст из модели. Вот тут какой…
s

qml и С++ setproperty

Доброе время суток. Вопрос может быть банальный... но не для меня ((( есть ли возможность при создании динамической переменной через функцию с++ "setProperty" этой переменной пол…

Ошибка при работе утилиты не удалось получить фабрику класса com для компонента с clsid

Проблема решилась. Оказывается для работы нужно чтобы был установлен Microsoft Office. Причем об этом нигде не было сказано.
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB