crossplatform.ru

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

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 килобайт ) Кол-во скачиваний: 454


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


Участник
**

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

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




Репутация:   9  


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

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

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 28.6.2025, 10:43