Russian Qt Forum

Qt => Общие вопросы => Тема начата: cresta от Август 04, 2007, 14:55



Название: Имя файла при drag-drop
Отправлено: cresta от Август 04, 2007, 14:55
Тащу на диалог файл например TextFile #1.txt, а в dropEvent получаю имя TextFile %231.txt.
Файл File %23.txt превращается в File %%2523.txt
Как пофиксить проблему?


Название: Имя файла при drag-drop
Отправлено: SABROG от Август 04, 2007, 15:25
%23 это HEX код символа "#"

Скорее всего Qt пытается перекодировать некоторые символы как это делает браузер с русским языком в гиперссылках. Должна быть функция обратного преобразования, наверно стоит посмотреть в сторону класса QUrl.
QString QUrl::fromPercentEncoding ( const QByteArray & input )   [static]


Название: Имя файла при drag-drop
Отправлено: cresta от Август 04, 2007, 19:04
QUrl::fromPercentEncoding в qt 3.3 нет, но методом QUrl::decode сумел восстановить данные.

Код:
    void Gui::dropEvent(QDropEvent* event){
        QString format = event->format ( 0 );
        QString encodedString = event->encodedData (format);
        QUrl::decode(encodedString);
        qDebug(encodedString);

        QStringList list;
        if (encodedString.left(5) = "file:"){
            encodedString.replace("file:", "", FALSE);
            list = QStringList::split('\n', encodedString, FALSE);
            playList->appendList(list);
        }
    }


Спасибо за наводку.


Название: Имя файла при drag-drop
Отправлено: SABROG от Август 06, 2007, 17:48
Щас глянул, на самом деле надо использовать QTextDrag::decode или QUri::decode/decodeLocalFiles