R
Rumata72308 липня 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 действии. В данном случае во вьюшках нужно разрешить выделение построчно, а не по ячейкам. Тогда более менее корректно должно работать. В случае с ячейками потребуется более детальное тестирование и обработка событий. Да и для переноса полных данных строки нужно использовать именно построчное выделение.




          Коментарі

          Only authorized users can post comments.
          Please, Log in or Sign up
          AD

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

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

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

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

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

          • Результат:20бали,
          • Рейтинг балів-10
          Останні коментарі
          ИМ
          Игорь Максимов22 листопада 2024 р. 11:51
          Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          Evgenii Legotckoi
          Evgenii Legotckoi31 жовтня 2024 р. 14:37
          Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
          A
          ALO1ZE19 жовтня 2024 р. 08:19
          Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов05 жовтня 2024 р. 07:51
          Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas505 липня 2024 р. 11:02
          QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          Тепер обговоріть на форумі
          Evgenii Legotckoi
          Evgenii Legotckoi24 червня 2024 р. 15:11
          добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
          t
          tonypeachey115 листопада 2024 р. 06:04
          google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
          NSProject
          NSProject04 червня 2022 р. 03:49
          Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
          9
          9Anonim25 жовтня 2024 р. 09:10
          Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

          Слідкуйте за нами в соціальних мережах