ДК
Қар. 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.
        Спасибо за участие!

          Пікірлер

          Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
          Кіріңіз немесе Тіркеліңіз