Название: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Август 15, 2012, 18:20 Добрый вечер ребята) Подскажите пожалуйста как мне реализовать перетаскивание из ячеки таблицы в ветку дерева. Приложение следующее:
Есть список групп и подгрупп. Я их отображаю в QTreeView. В каждой группе или подгруппе имеются фамилии участников. Они отображаются в отдельной таблице в зависимости от выбранной группы. Нужно сделать следующее: Выбирается фамилия участника из таблицы, состоящего в группе №1 и тащится в дерево групп в группу №2. При перетаскивании нужно чтобы рисовался луч от участника до группы в которую его тащат. Ребята, помогите, подскажите идеи для реализации перетаскивания с таким эффектом)) Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: Swa от Август 16, 2012, 10:17 В модели таблицы переопределяете методы:
Код: QMimeData* Model::mimeData (const QModelIndexList& indexes) const { В модели treeView переопределяете Код: bool HierarchyModel::dropMimeData (const QMimeData* data, Qt::DropAction action, Естественно для представлений нужно разрешить drag'n'drop. Как луч рисовать: при начале перетаскивания запоминаете начальную позицию мыши, вычисляете конечную. Создаете QImage с прозрачным фоном, рисуете туда линию и рендерите его поверх основного окна. Как-то так. Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Август 16, 2012, 22:41 Спасибо большое, буду пробовать!
Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Сентябрь 13, 2012, 21:54 всё хорошо, но у меня в таблице нет модели.. и я отнаследовалась от QTableWidget и переопределила у него метод mimeData(). Но к сожалению, я заметила что именно переопределение этого метода всё портит... Если я его не трогаю то вижу что попадаю в функцию
Код: bool PQModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent){ Если я переопределяю у своего QTableWidget метод Код: QMimeData* PQTableWidget::mimeData(const QList<QTableWidgetItem *> items)const Уже два дня вожусь, ну что-то не пойму что я не так пишу.. Ребята, подскажите пожалуйстаЙ Вот код моей модели дерева: Код
Код здесь собственно всё очень просто и работает как надо. вот код моей таблицы: Код
Код Как правильно переопределить метод QMimeData* PQTableWidget::mimeData(const QList<QTableWidgetItem *> items)const, чтобы всё правильно заработало???? Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Сентябрь 13, 2012, 22:24 нашла ошибку, нужно было тип другой указать:
Код
теперь вижу,что при перетаскивании из таблицы в QTreeView у модели QTreeView срабатывает функция Код: bool PQModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent){ Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: kambala от Сентябрь 13, 2012, 23:09 QTableWidget::mimeData(items); — этот вызов «портит» всё, что ты записываешь руками
Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Сентябрь 14, 2012, 11:55 всё равно не могу достать данные... я в QMimeData записываю int и пытаюсь его потом достать:
Код: int id = (int) data; Название: Re: Перетаскивание из QTableWidget в QTreeView Отправлено: virtual_root от Сентябрь 14, 2012, 11:58 я достала данные) внимательно ещё раз изучила документацию и нашла там)
Код: QByteArray encodedData = data->data("application/vnd.text.list"); |