Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Zerkin от Февраль 03, 2014, 10:51



Название: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 10:51
Доброго времени суток, господа!

Использую QDesktopServices::openUrl(const QUrl & url) для открытия html-лога в браузере по умолчанию. Всё хорошо, но суть в том, что файлу этого лога присваивается нестандартное расширение (от меня не зависит) вида .Ank, где n, k числа. Собственно, раздражает следующее поведение - как вы уже поняли, если файл с конкретным расширением не был открыт в каком-либо браузере до этого момента, то Windows (а это главная платформа в проекте) выбрасывает сообщение, что невозможно открыть файл, и приходится руками выбирать браузер. Процедура не очень утомительная, но пользователей не устраивает.

Собственно, вопрос: используя openUrl, можно ли как-то обойти эту особенность ОСи и сразу открывать через браузер по умолчанию, без этого промежуточного сообщения? Или это придется обходить уже как-то через QProcess?


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Bepec от Февраль 03, 2014, 11:52
пишите html в конце лога.
"имяЛога.Ank.html".

Самое верное решение!


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 14:00
Верес, не имею права.
Мой модуль взаимодействует с общей системой, а в ней принят такой принцип создания любых файлов и присваивания им расширений, без разницы что внутри - html, или что-то другое. Расширения такие и точка.
Так что вопрос открыт.

Попутная проблема: В дебаговской сборке  на  if'е студия вылетает  раз через раз  :-\ Что очень странно.

Код:
QUrl logUrl("file:///" + path, QUrl::TolerantMode);	
if (QDesktopServices::openUrl(logUrl))
{...}

(http://s7.hostingkartinok.com/uploads/thumbs/2014/02/0affd6842fe71f1cb163089511cc9df1.png) (http://hostingkartinok.com/show-image.php?id=0affd6842fe71f1cb163089511cc9df1)



В релизе проблемы нету.


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Bepec от Февраль 03, 2014, 14:05
Значит платформозависимо создавайте ассоциацию с этим типом файлов. Хотя хз как создавать, если расширения меняются нафиг? Тупизм какой то. Чесстное слово :)
Винда каждый раз спрашивать будет ассоциацию!

PS вы поспрашивайте у разрабов, у них скорее всего есть программа специальная для просмотра.

PPS можете плюнуть и переименовывать файл на лету (если разрешено).
Можете тупо копировать его в темповскую папку с нужным расширением и оттуда открывать.  (это мне кажется более подходящим вариантом)


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 14:12
Не сказал бы, что тупизм, там на этом принципе очень мощная система построена, на самом деле, n,k - не рандомные числа, они отвечают за определенную индексацию и еще что-то там, я честно говоря до конца не вникал, да и не моё это дело :)  Просто применительно к моей задаче такой принцип не очень подходит, да и не рассчитывал, вероятно, никто, когда система создавалась, что в этих файлах будет лежать что-то отличное от записанных цифровых сигналов ;) А сейчас такая вот задача появилась.

Думаю, конечно, как вариант прикрутить виджет вебкитовский, чтоб пользователь просматривал лог через него, а не через браузер, но хотелось бы конечно не плодить окна от модуля.


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 14:14
Да, я тоже думал про какой-нибудь временный файл. Может быть, это выход.


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Igors от Февраль 03, 2014, 14:20
Здесь важно что за платформа. Напр на OSX это вообще не проблема, т.к. файл имеет тип (4 байта) и если он ненулевой то используется ОС'ом до extension. Если неск приложений умеют открывать файл такого типа, то можно установить атрибут creator (тоже 4 байта). По поводу др nix ОС'ов - по крайней мере тип должен быть. Или у Вас Вындоуз?


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 14:22
Онли Винда. Никсы где-то в очень далекой и туманной перспективе.


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 03, 2014, 14:37
А по поводу вылета студии в дебаге у кого какие мысли есть?


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Igors от Февраль 03, 2014, 14:46
Онли Винда. Никсы где-то в очень далекой и туманной перспективе.
Тогда нужно что-то прописывать в реестре (напр на старте приложения). Да, через WinAPI, подробностей не знаю, но такая возможность есть: напр архиваторы умеют открывать свой "том архива" (с переменным расширением как у Вас).

Ничего, походы в нативняк тоже полезны (чтобы не расслаблялись с OpenUrl)  :)


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: kambala от Февраль 03, 2014, 14:53
в реестр можно писать и через QSettings

можно попробовать запросить браузер по умолчанию (например программа, открывающая файлы html) и запустить его с твоим файлом в качестве параметра


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: xokc от Февраль 04, 2014, 08:51
Как вариант: перед вызовом openUrl создавать временный html файл с содержимым, выполняющим редирект на требуемый *.Ank файл и в openUrl подставлять именно этот временный файл.


Название: Re: Использование openUrl, открытие файла с неизвестным расширением
Отправлено: Zerkin от Февраль 04, 2014, 11:12
Как вариант: перед вызовом openUrl создавать временный html файл с содержимым, выполняющим редирект на требуемый *.Ank файл и в openUrl подставлять именно этот временный файл.

Сделал как Вы предложили, вполне всё меня устраивает, спасибо!
Спасибо всем за советы, остался только вопрос вылета студии, но я так понимаю это вопрос не данного раздела, да и проблема не в коде, вероятно.