crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTreeView - dpor в запрещенную позицию
LonelyDreamer
  опции профиля:
сообщение 13.7.2009, 11:14
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 25.6.2009
Пользователь №: 850

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеется стандартный QTreeView и соответствующая модель, для которой определены операции drag'n'drop (перемещение). При перемещении на конкретный элемент все работает нормально. Но если кинуть элемент eight в красную точку, как показано на рисунке, то элемент вставляется (пытается) в корень (QIndexModel()), хотя функция flags() не устанавливает для него Qt::ItemIsDropEnabled (вообще кидание элементов в корень возможно, но элементы не должны находиться в корне).

Прикрепленное изображение


Как с этим бороться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.7.2009, 16:15
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(LonelyDreamer @ 13.7.2009, 15:14) *
кидание элементов в корень возможно, но элементы не должны находиться в корне
фразу не понял
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LonelyDreamer
  опции профиля:
сообщение 13.7.2009, 17:23
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 25.6.2009
Пользователь №: 850

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имел в виду, что элемент нельзя скопировать/переместить в непосредственного родителя - функция flags не возвращает в таком случае Qt::ItemIsDropEnabled и в treeView показывается черный знак "стоп".

Вообще, проблема в том, что элемент, который в корень (QModelIndex()) вставить нельзя (то есть one и eight) каким-то образом в него вставляется, хотя Qt::ItemIsDropEnabled не установлен.

bool MyTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
    if (action == Qt::IgnoreAction)
        return true;
    if (!data->hasFormat("app/tree.node") || column > 0)
        return false;
    if (!(flags(parent) & Qt::ItemIsDropEnabled)) // something wrong
    {
        qDebug() << "It's Impossible!";
        return false;
    }


В вывод приложения получаем строку "It's Impossible!".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 2:18