Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QListview & DropEvent
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
enslaver
Я начинающий Чайник :) на 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);

сурц всего этого дела прикреплю.
Нажмите для просмотра прикрепленного файла

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

Цитата(enslaver @ 25.3.2010, 20:00) *
(x0.5,y0.5)
не понял этой записи, может (1.5x, 1.5y) ?
enslaver
да (x1.5,y1.5)
координаты локальные для QListView.
А насчет примера знаю что нету, и как с подобным быть не знаю...
неужели никто не пытался написать свой файловый браузер?
MoPDoBoPoT
Ты QDropEvent обрабатываешь в главном окошке, из-за этого, по-моему, координаты, получаемые из event->pos(), являются относительными к главному окну. Надо сделать что-то вроде этого:
ListView->indexAt(ListView->mapFrom(this, event->pos()));

Если координаты все-таки глобальные, то использовать mapFromGlobal() (из доки что-то не ясно).
Еще, возможно, надо будет приводить к коодинатам вьюпорта:
ListView->viewport()->mapFrom(...)
enslaver
Спасибо, это помогло использовал 2 вариант.

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

Работает именно так как должно, огромное спасибо :)))) теперь могу хоть дальше работу продолжить....
Оста лось только меню реализовать (копировать или переместить) и контекстное меню, а то тоже немного не понял как оно риализовывается...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.