вторник, 5 мая 2009 г.

Qt 4.5.1 и кириллица в URL

1. Суть проблемы


Столкнулся с проблемой кириллицы в Qt SDK by Nokia 2009.02 (open source) под Windows. Ссылки на файлы с кириллическими именами не работают. Приведу пример неработающего кода и способ решения проблемы.

2. Неработающий код


Сперва укажем в какой кодировке мы набираем исходный код. У меня это Win-1251.
QTextCodec::setCodecForTr(
QTextCodec::codecForName("Windows-1251") );

Создадим экземпляр класса QLabel, на него положим HTML ссылку:
QLabel label( tr("<a href=\"файлик.doc\">link</a>") );

Включим автоматическое открытие ссылок через QDesktopServices::openUrl():
label.setOpenExternalLinks( true );

Ну и само собой, при клике по ссылке ничего не происходит. Совсем ничего. (Или я что-то не так делаю?)

3. Вариант решения проблемы


Как вариант, создадим свой слот обработки клика по линку:
void linkClick(QString str)
{
QString path = "file:///" + qApp->arguments()[0];
path = path.left( path.lastIndexOf('\\')+1 );
QDesktopServices::openUrl( path + str );
}

Соединяем сигнал label-а с нашим слотом:
connect( label, SIGNAL(linkActivated(QString),
this, SLOT(linkClick(QString)) );

Не забываем выключить автоматическое открытие линков:
label.setOpenExternalLinks( false );

Теперь при клике по ссылке будет вызываться наша функция. И теперь всё работает.

Весьма странно. Почему без "file:///" не работает? почему не работает по относительному пути?

Зарегистрирован в task-tracker как "the issue number #253955".

Комментариев нет: