Название: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: YvenTitan от Январь 14, 2016, 09:05 Здравствуйте.
Необходимо перетаскивать строки в таблице со скрытым столбцом (скрыт методом mainTableView->setColumnHidden(6,true)) с помощью Drag and Drop. Сейчас если я перетаскиваю строку, когда столбец скрыт, то перетаскивает нормально, но если после этого сделать столбец видимым, то программа вылетает. Как это исправить? Пишу вопрос на форумах первый раз, заранее извините, если не туда написал или простой вопрос задал. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: gil9red от Январь 14, 2016, 09:33 Проблема не с Qt, а с вашим кодом, поэтому, чтобы вам можно было помочь, приложите минимальный проект с проблемой. Лучше всего выкладывать не сам код (особенно, если его очень много), а архив с проектом. Вложение делается в "Дополнительные опции/Вложение"
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: YvenTitan от Январь 14, 2016, 14:59 Пока делал из сложного проекта простой, вылетать перестало. Но при перетаскивании данные из скрытого столбца не копируются. Да наверно и не должны.
Вопрос в том, как сделать, чтобы копировались данные скрытого столбца при перемещении. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 14, 2016, 17:51 Я не имел опыта работы с драг и дропом, но разве внутренние перетаскивания не с помощью QAbstractItemModel::moveRows реализуются?
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 14, 2016, 18:53 В View Qt существует интересная особенность. То что скрыто - того нет. Потому ручками надо самому копирование осуществлять.
PS к примеру sql модель со скрытым столбцом (даже автозаполняемым) не заносит данные в базу :) Хотя всё это актуально до пятерки. После пятерки не проверял. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 14, 2016, 22:38 Верес, дык не вьюха же отвечает за копирование, а модель. А в модели нет скрытых столбцов.
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 14, 2016, 22:42 Я это понимаю и это было бы логичным. Однако оно работает как-то не так. Как уже упоминал при добавлении записи в таблицу со скрытым столбцом скрытый столбец даже не инициализировался.
PS можно конечно перепроверить и сказать абсолютно точно, но я себя не особо чуйствую для таких подвигов. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: YvenTitan от Январь 15, 2016, 08:36 Можешь поподробнее рассказать, как "ручками" копировать.
В каком классе (наследник от QTableView или QAbstractTabelModel)? С помощью какой функции? Я пробую наследовать от QTableView и в этом наследнике переопределять метод startDrag. Пока не получается. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 15, 2016, 09:19 QTableView ответственна за отображение данных. Наследник QAbstractTabelModel ответственный за хранение и манипуляцию с данными.
При работе пользователя с QTableView (отображение, редактирование) вызываются методы QAbstractTabelModel. Имхо, не нужно даже наследоваться от QTableView. Там уже всё есть самое необходимое. Работать надо со свойствами QTableView а также переопределить методы у QAbstractTabelModel для манипуляции с данными. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 15, 2016, 09:32 Не суть, всё так же работает как я и сказал. View определяет какие столбцы надо копировать/перемещать. А она определяет это исходя из видимых столбцов и запрашивает их (видимые столбцы) у модели.
В принципе я так понимаю это сделано для поддержки драгенддропа из одной view в другую. Т.е. скрыл все столбцы кроме 3 - можешь спокойно копировать в таблицу с 3 столбцами. Как это поправить? копировать в mimeData все столбцы. Но тогда вполне возможно вы не сможете копировать в другие view эти данные. Ну или если быть точным, то может что то не так пойти :D Функция QMimeData *MyTableModel::mimeData(const QModelIndexList &indexes) const, вместо Код: foreach(QModelIndex index, indexes){ Код: for (int i = 0 ; i < columnCount(); i++) PS ну и потестировать работоспособность конечно :D Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: YvenTitan от Январь 15, 2016, 09:44 Большущее спасибо, Верес! Работает!
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 15, 2016, 11:51 А использовать MimeData это единственный способ перемещения строк внутри вьюхи? Я ожидал, что должно быть свойство, которое заставляет дёргать moveRows
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 15, 2016, 12:03 Эмм...
Тут не происходит перемещения внутри вьюхи. Тут происходит копирование в mime, удаление записи, вставка записи. Перемещение было бы, если б не было выдирания строки из View мышкой. А по кнопке допустим. Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 15, 2016, 12:07 А как разрешить дроп между строками? В том числе перетащить строку и сделать её последней в таблице.
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 15, 2016, 12:25 Это и есть DragAndDrop.
Берём, бросаем. При взятии она удаляется из модели, при бросании добавляется. Ну т.е. он реализован и правильно на самом деле. Ибо если запоминать выдираемые строки и их родителей, это усложнит систему % на 50 :) Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 15, 2016, 13:22 Кажется вы вопроса не поняли. Скриншоты на примере автора ниже. На втором пытаюсь воткнуть между строк
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 15, 2016, 13:54 Последней... хз. Как то не задумывался ниразу да и не приходилось делать :D
Стандартная логика - вставить перед записью на которую наведён указатель. Так что скорее всего придётся переписывать самому поведение :) Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 15, 2016, 14:00 Имхо. :) Стандартная логика это раздвинуть строки, таким образом показывая готовность вставить между ними перетаскиваемую строку.
Ещё вариант, проводить черту между строками, куда будет падать объект. То, что я вижу на первом скриншоте, это (по моей логике :)) Засунуть строку в ячейку field14 Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: panAlexey от Январь 16, 2016, 17:39 Было бы классно, если бы не так очерчивалось рамка куда предполагается вставить, а красным и повиднее.
А то нефига не видно. :( Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Bepec от Январь 17, 2016, 02:48 И то что просит Heaven и то что хочет panAlexey реализуемо и в каком то давнем проекте я это делал. Но это надо стандартное поведение переписывать :P
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: __Heaven__ от Январь 17, 2016, 11:22 Верес, мне бы ваш опыт :)
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: panAlexey от Январь 17, 2016, 11:54 И мне :)
Название: Re: drag and drop в QAbstractTableModel со скрытым столбцом Отправлено: Igors от Январь 17, 2016, 13:45 Было бы классно, если бы не так очерчивалось рамка куда предполагается вставить, а красным и повиднее. Ага, и эта "простыня" таскаемых айтемов выглядит ужасно. Делал велосипед (http://www.prog.org.ru/index.php?topic=29013.msg212713#msg212713)А то нефига не видно. :( |