Автор: enslaver 25.3.2010, 17:00
Я начинающий Чайник на 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 килобайт )
: 416Нужно реализовать перемещение в папку. А вот как это сделать толком так нигде и не видел, может кто поможет, а то уже не первый день сижу голову ломаю....
Автор: Litkevich Yuriy 25.3.2010, 17:36
Цитата(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
да (x1.5,y1.5)
координаты локальные для QListView.
А насчет примера знаю что нету, и как с подобным быть не знаю...
неужели никто не пытался написать свой файловый браузер?
Автор: MoPDoBoPoT 25.3.2010, 20:57
Ты QDropEvent обрабатываешь в главном окошке, из-за этого, по-моему, координаты, получаемые из event->pos(), являются относительными к главному окну. Надо сделать что-то вроде этого:
ListView->indexAt(ListView->mapFrom(this, event->pos()));
Если координаты все-таки глобальные, то использовать mapFromGlobal() (из доки что-то не ясно).
Еще, возможно, надо будет приводить к коодинатам вьюпорта:
ListView->viewport()->mapFrom(...)
Автор: enslaver 26.3.2010, 18:53
Спасибо, это помогло использовал 2 вариант.
ListView->viewport()->mapFrom(this,event->pos())
Работает именно так как должно, огромное спасибо ))) теперь могу хоть дальше работу продолжить....
Оста лось только меню реализовать (копировать или переместить) и контекстное меню, а то тоже немного не понял как оно риализовывается...