Russian Qt Forum
Ноябрь 23, 2024, 10:49
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
кто-нибудь переписывал drag-and-drop для QWebview?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: кто-нибудь переписывал drag-and-drop для QWebview? (Прочитано 4169 раз)
Radmir
Гость
кто-нибудь переписывал drag-and-drop для QWebview?
«
:
Сентябрь 27, 2016, 08:54 »
Добрый день всем!
Qt 4.8.6 под windows или linux. Не работает drag-and-drop с кнопкой ctrl внутри qwebview. По идее она должна создавать копию помеченного текста в новом месте. Однако так не получается.
Также не кладется link на рабочий стол.
Кто-нибудь переписывал эту вещь или добился успехов через eventFilter.
Поделитесь, чем можете.
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #1 :
Сентябрь 29, 2016, 19:22 »
Возьмем простой пример:
Делаем стандартное Qt приложение в Qt Creator-е с формой MainWindow.
Открываем его в дизайнере, добавляем элемент QWebView
В конструкторе добавляем:
ui->webView->page()->setContentEditable(true);
запускаем, пишем любое приложение и выполняем перетаскивание.
Вопрос 1: почему не выполняется копирование при нажатом Ctrl?
Вопрос 2: почему после перетаскивания непосредственно перед перемещенным текстом стоит ?
Вопрос 3: Если вы кликнете перед этим текстом и введете пробел, то весь перемещенный текст окрасится в синий цвет выделения, но на само деле это не выделение.
Если у вас всего этого нет, то дайте мне ваш webkit, хотя бы для подтверждения лицензии GNU.
Помните - это касается win32 + Qt 4.8.2, 4.8.5, 4.8.6.
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #2 :
Октябрь 15, 2016, 08:12 »
Добился отсутсвия при перетаскивании, символ отсутствует, однако, если нажать на пробел перед первым символом вставки, окрашивание появляется снова.
Какие будут предположения?
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #3 :
Ноябрь 04, 2016, 09:21 »
Наконец, небольшое продвижение:
Оказалось, что под виндой drag-and-drop реализуется через OLE2. Вызывается функция DoDragDrop, она и решает, что делать DragCopy или DragMove. У меня цепляется в C:\Program Files\Microsoft SDKs\Windows\v7.0A. Должно быть эта реализация Ole2 такая, которая не поддерживает DragCopy.
Кто-нибудь может подсказать, как прицепиться к той версии Ole2, которая работает?
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #4 :
Ноябрь 04, 2016, 09:24 »
Цитата: Radmir от Октябрь 15, 2016, 08:12
Добился отсутсвия при перетаскивании, символ отсутствует, однако, если нажать на пробел перед первым символом вставки, окрашивание появляется снова.
Какие будут предположения?
Радмир
Вот еще особенность: Если перетаскивать извне, то явление не наблюдается.
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #5 :
Ноябрь 13, 2016, 08:43 »
Цитата: Radmir от Ноябрь 04, 2016, 09:21
Наконец, небольшое продвижение:
Оказалось, что под виндой drag-and-drop реализуется через OLE2. Вызывается функция DoDragDrop, она и решает, что делать DragCopy или DragMove. У меня цепляется в C:\Program Files\Microsoft SDKs\Windows\v7.0A. Должно быть эта реализация Ole2 такая, которая не поддерживает DragCopy.
Кто-нибудь может подсказать, как прицепиться к той версии Ole2, которая работает?
Радмир
Добрый день всем,
Анализ показал, что под виндой работает модуль qdnd_win.cpp, лежащий в исходнике Qt, каталог src/gui/kernel/
Он и вызывает OLE2 функцию HRESULT r = DoDragDrop(obj, src, allowedEffects, &resultEffect);
Здесь obj - указатель на перетаскиваемые данные, src указатель на DropSource итерфейс. Сам DropSource итерфейс реализован в ранее указаном файле, все вроде хорошо, только в одном месте (модуль qdrag.cpp) отдается предпочтение операции Qt::MoveAction, она проверяется на допустимость раньше, чем Qt::CopyAction, но решение принимается в функции QOleDropSource::GiveFeedback(DWORD dwEffect) - она вызвается с параметром dweffect = 2 (хотя allowedEffects допускает все значения), что подразумевает Qt::MoveAction; более того, далее в ней следует оператор, который присваивает это значение переменной currentaction и выдает сигнал о смене дроп операции.
Что происходит внутри DoDragDrop непостижимо, так она принадлежит Windows (У меня это WindowsSDK, v.7.0a.
В то же время пример на drag-and-drop на VB6 работает нормально, то есть OLE2 в порядке.
Может кто имеет исходит для WINOLEAPI DoDragDrop?
Дайте поковыряться. Я сделал workaround, но хотелось бы сделать правильно, если исходника не будет, придется самому переписать ее!?
Радмир.
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #6 :
Ноябрь 13, 2016, 08:53 »
Цитата: Radmir от Ноябрь 04, 2016, 09:24
Цитата: Radmir от Октябрь 15, 2016, 08:12
Добился отсутсвия при перетаскивании, символ отсутствует, однако, если нажать на пробел перед первым символом вставки, окрашивание появляется снова.
Какие будут предположения?
Радмир
Вот еще особенность: Если перетаскивать извне, то явление не наблюдается.
Радмир
Окончательно установлено, точки вставки дроп акции перетаскивания критичны, можно сделать несколько операций, и вставка буквы в эту позицию ведет к окрашиванию вставленного текста. Если их две, то будет и две подсветки при печати в каждой точке вставки. Классная фича, даже не представляю как ее преодолеть! Переписать gui?
С уважением,
Радмир
Записан
Radmir
Гость
Re: кто-нибудь переписывал drag-and-drop для QWebview?
«
Ответ #7 :
Ноябрь 25, 2016, 18:35 »
Насчет феномена окрашивания выяснилось следующее. Drag-and-Drop ни причем. Что-то с реализацией QWebView под Windows в Qt 4.8.x. Самый простой пример следующий:
Набираем предложение в QWebView, двойным кликом выделяем слово, меняем шрифт, например делаем его Bold, Italic или UnderLine, ставим курсор в непосредственно за этим словом, печатаем любую букву, и синева окрашивает следующее слово.
Похоже в позиции, в которых стоит закрывающий html тег, или начало, конец промежутка выделения, вводить что либо нельзя. Установить, кто в конечном счете красит, к сожалению, не удалось.
Я могу изменить исходные файл Qt, но отладчик cdb не останавливается на установленных точках прерывания в этих файлах, поэтому приходится оперировать отладочной печатью. Тестовый проект не включает непосредственно эти файлы, если их включить, то он не находит файлы include, которые указаны по относительному пути к проектам Qt. Не могу разобраться куда поместить тестовый проект, чтобы точки прерывания работали...
Надо бы как-то похимичить с точками ввода, например, сдвигать точку/позицию каретки, и делать ввод туда где нет подкрашивания, но пока не получается.
Еще одни интересный момент, впечатать букву куда попало нельзя, это хорошо видно при перетаскивании, там курсор прыгает из позиции в позицию, там где можно будет вставить текст. Интересно, как это сделано?
Радмир
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...