R
Rumata7238 июля 2018 г. 23:11

Перенос данных из таблицы в таблицу/работа с ячейкой

Здравствуйте.

1. В своей программе переношу ячейки с помощью DragDrop из одной таблицы в другую. В первой таблице изначально 1 столбец и много строк, а во второй - пусто.
При переносе ячейки в пустое поле - переносится нормально. Также нормально переносится, если указать "пункт назначения" между уже имеющимися ячейками. Но если перекинуть на уже имеющуюся ячейку - в первой таблице значение удаляется, а во второй не появляется (да, мне нужно чтобы в первой таблице именно удалялось, т.е. не копия а перемещение).

Каким способом можно сделать так, чтобы при переносе на уже имеющуюся ячейку значение переносилось, а не просто исчезало из первой таблицы? Ну либо можно ли как-то сделать запрет переноса на уже имеющуюся ячейку.
Настройки таблиц ниже.
2. Как можно взаимодействовать с ячейкой?
Например, у меня есть 2 QStringList: в одном ID, в другом наименования (выведены в таблицу). Цель - выводить (например в lineEdit) ID по наименованию, которое вычисляется из ячейки. ID и наименования перечислены в синхронном порядке, вопрос только в том, как при клике на ячейку выдергивать из неё текущий текст.



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

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

4
Evgenii Legotckoi
  • 10 июля 2018 г. 15:19

Добрый день!

Касательно первого вопроса. Можно запретить перенос ячеек в уже существующие записи. Для этого нужно создать свою кастомную модель данных. Она должна будет быть наследована от той модели данных, которую вы установили изначально в QListView.
Полагаю, что это QStringListModel. И нужно будет переопределить метод flags, чтобы запрещать перенос ячеек в том случае, если пользователь навёл DragAndDrop действие на уже существующую запись. То есть в данном случае пользователю будет разрешено переносить объекты либо между строками, либо в пустую область.
Делается это так
CustomModel.h



#ifndef CUSTOMMODEL_H
#define CUSTOMMODEL_H

#include <QStringListModel>

class CustomModel : public QStringListModel
{
    Q_OBJECT
public:
    explicit CustomModel(QObject *parent = nullptr);

signals:

public slots:

    // QAbstractItemModel interface
public:
    virtual Qt::ItemFlags flags(const QModelIndex &index) const override;
};

#endif // CUSTOMMODEL_H

CusomModel.cpp

#include "CustomModel.h"

CustomModel::CustomModel(QObject *parent) : QStringListModel(parent)
{

}

Qt::ItemFlags CustomModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags = QStringListModel::flags(index);

    if (index.isValid())
    {
        flags &= (~Qt::ItemIsDropEnabled);
    }
    return flags;
}
    Evgenii Legotckoi
    • 10 июля 2018 г. 15:21
    • (ред.)

    Что касается второго вопроса, то там нужно оперировать методами модели данных data и setData и извлекать данные с помощью QModelIndex при выделении строки в таблице.

    Вот например в статье по работе с QDataWidgetMapper забираются данные через метод data с помощью QModelIndex
      R
      • 10 июля 2018 г. 17:27

      Таблицы на основе QTableView. С ними таким же способом, или иначе?



        Evgenii Legotckoi
        • 10 июля 2018 г. 17:32

        С QTableView не проверял... но теоретически должно сработать.

        По механике работы там идёт либо перемещение в свободную ячейку, либо замена содержимого. Данное переопределение метода flags позволяет запретить замену в ячейке, если целью является ячейка с валидным индексом.
        Вопрос в том, как данные Вы будете позволять выделять при Drag And Drop действии. В данном случае во вьюшках нужно разрешить выделение построчно, а не по ячейкам. Тогда более менее корректно должно работать. В случае с ячейками потребуется более детальное тестирование и обработка событий. Да и для переноса полных данных строки нужно использовать именно построчное выделение.




          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь
          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
          innorwall14 ноября 2024 г. 21:26
          Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
          i
          innorwall14 ноября 2024 г. 19:03
          Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
          i
          innorwall14 ноября 2024 г. 11:42
          Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
          i
          innorwall14 ноября 2024 г. 9:09
          Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
          Сейчас обсуждают на форуме
          i
          innorwall14 ноября 2024 г. 3:39
          добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
          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
          Реализация навигации по разделам Спасибо Евгений!

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