crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QListview & DropEvent, QListView использует QDirModel
enslaver
  опции профиля:
сообщение 25.3.2010, 17:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

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




Репутация:   0  


Я начинающий Чайник :) на QT.
Делать вот мне нечего пишу Файловый браузер, за основу взял Долфин.
Столкнулся с проблемой.
перетаскиваю объект(любой) хоть на папку хоть на файл, получаю
event->pos(); // возвращает QPoin где остановился курсор

то бишь точку в которой остановился курсор.
!!!И тут вот она и проблема!!!!
пытаюсь получить имя объекта на котором остановился курсор
ListView->indexAt(event->pos()); // возвращает QModelIndex объекта с заданными координатами

но он понимает только верхнюю левую точку области выделения объекта, а внутри области он их не видит, и следовательно ничего не возвращает.
для понимания проблемы привету вам модель проблемы:

(x1,y1)----------(x2,y1)
|****************|
|****************|
|****(x0.5,y0.5)****|
|****************|
|****************|
(x1,y2)--------------(x2,y2)

event->pos();

координаты (x0.5,y0.5);

А функция ниже может обрабатывать только точки с координатами(x1,y1);
ListView->indexAt();


нужно что бы при любых (x0.5,y0.5) он возвращал нужное значение(x1,y1);

сурц всего этого дела прикреплю.
Прикрепленный файл  file_comander.tar.gz ( 5.33 килобайт ) Кол-во скачиваний: 279


Нужно реализовать перемещение в папку. А вот как это сделать толком так нигде и не видел, может кто поможет, а то уже не первый день сижу голову ломаю....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.3.2010, 17:36
Сообщение #2


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

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

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




Репутация:   94  


Цитата(enslaver @ 25.3.2010, 20:00) *
// возвращает QPoin где остановился курсор
...
то бишь точку в которой остановился курсор.
А в чьих координатах? Виджета (QListview), его области просмотра или вовсе в глобальных. Я оперативно в доке не увидел подобной оговорки.

Цитата(enslaver @ 25.3.2010, 20:00) *
(x0.5,y0.5)
не понял этой записи, может (1.5x, 1.5y) ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 25.3.2010, 20:47
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

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




Репутация:   0  


да (x1.5,y1.5)
координаты локальные для QListView.
А насчет примера знаю что нету, и как с подобным быть не знаю...
неужели никто не пытался написать свой файловый браузер?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 25.3.2010, 20:57
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

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




Репутация:   9  


Ты QDropEvent обрабатываешь в главном окошке, из-за этого, по-моему, координаты, получаемые из event->pos(), являются относительными к главному окну. Надо сделать что-то вроде этого:
ListView->indexAt(ListView->mapFrom(this, event->pos()));

Если координаты все-таки глобальные, то использовать mapFromGlobal() (из доки что-то не ясно).
Еще, возможно, надо будет приводить к коодинатам вьюпорта:
ListView->viewport()->mapFrom(...)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
enslaver
  опции профиля:
сообщение 26.3.2010, 18:53
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 25.3.2010
Пользователь №: 1565

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




Репутация:   0  


Спасибо, это помогло использовал 2 вариант.

ListView->viewport()->mapFrom(this,event->pos())

Работает именно так как должно, огромное спасибо :)))) теперь могу хоть дальше работу продолжить....
Оста лось только меню реализовать (копировать или переместить) и контекстное меню, а то тоже немного не понял как оно риализовывается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.9.2019, 16:37