Russian Qt Forum
Сентябрь 30, 2024, 10:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QTreeWidget + drug drop = как определить, какой элемент был перенесен?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeWidget + drug drop = как определить, какой элемент был перенесен? (Прочитано 5308 раз)
PavelVX
Гость
QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
:
Сентябрь 28, 2012, 10:49 »
QTreeWidget * treeWidget = new QTreeWidget(this);
treeWidget->header()->hide();
treeWidget->setAcceptDrops(true);
treeWidget->setDragEnabled(true);
treeWidget->setDragDropMode(QAbstractItemView::InternalMove);
Заполняется он из БД, поэтому, если делать DD, то нужно изменять одно из полей item и сохранить это изменение в БД.
QTreeWidget поддерживает drug drop без проблем, но вот как узнать, какой item я перетащил, что бы изменить его свойства?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4744
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #1 :
Сентябрь 28, 2012, 12:07 »
по-моему без view/model тут не обойтись
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
PavelVX
Гость
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #2 :
Сентябрь 28, 2012, 12:54 »
Как с моделью тут быть, я не знаю, если подскажешь, буду рад.
За неимение других идей, я пошел корявым способом, создал наследника QTreeWidget, переопределил
void dropEvent(QDropEvent *event);
void startDrag(Qt::DropActions supportedActions);
QTreeWidgetItem* currentItemForDrop; //заполняется в startDrag
В дропе смотрим, изменился ли родитель, если да, то пишем в базу. Но тут возникла проблема: как мне определить, что мой айтем стал TopLevelItem??
Мож кто подскажет, как это узнать?
Записан
Kurles
Бывалый
Offline
Сообщений: 480
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #3 :
Сентябрь 28, 2012, 13:06 »
Цитата: PavelVX от Сентябрь 28, 2012, 12:54
Как с моделью тут быть, я не знаю, если подскажешь, буду рад.
Отличная
статья
есть на эту тему.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
kambala
Джедай : наставник для всех
Offline
Сообщений: 4744
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #4 :
Сентябрь 28, 2012, 14:28 »
да, и про всякие QTreeWidgetItem придётся забыть
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
PavelVX
Гость
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #5 :
Октябрь 03, 2012, 10:42 »
в общем, я не то , что бы упрямый, но в данном месте, переделывать на модель, я не стал.
Определить, является ли элемент корневым. как оказалось, просто:
indexOfTopLevelItem(ItemForDrop) == -1.
Развивая дальше проект, решил добавлять элементы на дерево через ПКМ. Когда щелкаем по элементу, проблем нет, но вот как создать корневой элемент? Т.е. щелкая ПКМ, как определить, что я щелкнул именно по свободному пространству QTreeWidget?
Записан
Kurles
Бывалый
Offline
Сообщений: 480
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #6 :
Октябрь 03, 2012, 10:55 »
QTreeWidgetItem * QTreeWidget::itemAt ( const QPoint & p ) const
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
PavelVX
Гость
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #7 :
Октябрь 04, 2012, 04:38 »
Спасибо!
Век живи, век учись, .....
И откуда вы все это знаете ...
Записан
PavelVX
Гость
Re: QTreeWidget + drug drop = как определить, какой элемент был перенесен?
«
Ответ #8 :
Октябрь 05, 2012, 12:19 »
Думаю подобное многими реализовывалось, поэтому интересует как это ПРАВИЛЬНЕЕ сделать.
Есть модель model - наследник от QSqlTableModel (структура: ключ, ключ родителя, название, доп поля)
Есть форма, на ней QTreeWidget - (ключ, название) для простоты считаем, что дерево строится полностью на момент создания.
И QTableView отображающая model.
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
Так же есть QDataWidgetMapper + несколько элементов, в которых отображаются доп поля.
Как правильно синхронизировать действия по отображения текущего элемента? Т.е. ЛКМ по элементу в таблице - показываем текущим элементом лист на дереве. ЛКМ по листу в тривью, устанавливаем текущим нужную строку в tableView.
У модели же нет такого понятия как текущий индекс. Поэтому и возникает вопрос с синхронным показом и удалением.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...