Linux кажется легким: xdg-open <file/directory/URL>
.
По-видимому, Mac похож: open
следует использовать вместо xdg-open
. У меня нет доступа к Mac, поэтому я не смог его протестировать.
Для Windows я нашел 4 разных предложения, и те, которые я пробовал, потерпели неудачу.
-
Существует ли не-java-кросс-платформенный способ запуска связанного приложения для определенного типа файла? предлагает
start
-
Как настроить фокус на программу по умолчанию, открытую оболочкой, из Java? предлагает
cmd /c start ...
-
Как открыть предпочтительный редактор системы для данного файла? Как найти открыватель файлов по умолчанию с Java? предложить
RUNDLL32.exe
-
Каков правильный способ использования ShellExecute() в C, чтобы открыть .txt
Откройте файл с собственной программой Windows в коде С++
Как использовать ShellExecute для открытия html файлов в Windows с использованием С++? предложитьShellExecute
Я пробовал первые 3 с system()
и QProcess::startDetached()
и "http://www.stackoverflow.com"
как аргумент, но все они потерпели неудачу; start
работает отлично от командной строки. Я еще не пробовал ShellExecute
.
Что такое эквивалент Windows xdg-open
? Мне кажется, это start
, но почему мои попытки с start
завершились с ошибкой?
Является ли ShellExecute
моей единственной опцией?
EDIT Я думал, что QDesktopServices::openUrl()
предназначен для веб-страниц только потому, что он не работает для файлов или каталогов.
После некоторой отладки я понял, что если я заменил \\
на /
в пути в Windows, он будет работать для файлов, но каталоги все еще не будут открыты. Любые идеи, что я делаю неправильно?
QDir dir("C:/Documents and Settings/ali");
qDebug() << "Exists? " << dir.exists();
qDebug() << dir.absolutePath();
QDesktopServices::openUrl(QUrl(dir.absolutePath()));
qDebug() << "External app called";
Выход приложения:
Exists? true
"C:/Documents and Settings/ali"
External app called
Но ничего не происходит, каталог не открывается. В Linux каталоги открыты с файловым менеджером по умолчанию, как ожидалось.
РЕШЕНИЕ: Из-за ошибки Qt и quirks Windows (неправильное окно приложения) я закончил использование ShellExecute
. Это дает мне достаточно гибкости для достижения именно того, что я хочу за какой-то счет...