ДК
25 ноября 2020 г. 1:45

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

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

  1. _userModel->getAllUsers();
  2. _filterModel->setSourceModel(_userModel);
  3. ui->_usersTV->setModel(_filterModel);
  4. ui->_usersTV->setItemDelegate(_userDelegate);
  5. ui->_usersTV->setSelectionMode(QAbstractItemView::SingleSelection);
  6. ui->_usersTV->setEditTriggers(QAbstractItemView::AllEditTriggers);
  7. ui->_usersTV->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::ResizeToContents);
  8. ui->_usersTV->horizontalHeader()->setStretchLastSection(true);

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

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

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

  1. QVariant UserNode::data(const int column, const int role) const
  2. {
  3. switch (role) {
  4. case Qt::EditRole:
  5. {
  6. User* entity = item().value<User*>();
  7. switch (column) {
  8. case User::SECONDNAME:
  9. return entity->secondName();
  10. break;
  11. }
  12. }
  13. }
  14.  
  15. return TreeNode::data(column, role);
  16. }

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

2

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

4
M
  • 25 ноября 2020 г. 3:13
  • (ред.)

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

    ДК
    • 25 ноября 2020 г. 10:20
    • (ред.)

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

      M
      • 25 ноября 2020 г. 10:25

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

        ДК
        • 25 ноября 2020 г. 12:51

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

        1. Qt::ItemFlags UserModel::flags(const QModelIndex &index) const
        2. {
        3. Qt::ItemFlags flags = TreeModel::flags(index);
        4.  
        5. TreeNode* node = static_cast<TreeNode*>(index.internalPointer());
        6. if(UserNode* n = dynamic_cast<UserNode*>(node))
        7. return flags | Qt::ItemIsEditable;
        8. return flags;
        9. }

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

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь
          • Последние комментарии
          • IscanderChe
            12 апреля 2025 г. 17:12
            Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
          • AK
            1 апреля 2025 г. 11:41
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            9 марта 2025 г. 21:02
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            9 марта 2025 г. 16:14
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            22 ноября 2024 г. 21:51
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…