Класс QDesktopServices
Класс QDesktopServices предоставляет методы для доступа к общим службам рабочего стола. Подробнее...
| Заголовок: | #include <QDesktopServices> |
| qmake: | QT += gui |
| С момента: | Qt 4.2 |
Этот класс был представлен в Qt 4.2.
Статические публичные члены
| bool | openUrl(const QUrl &url) |
| void | setUrlHandler(const QString &scheme, QObject *receiver, const char *method) |
| void | unsetUrlHandler(const QString &scheme) |
Подробное описание
Многие среды рабочего стола предоставляют службы, которые могут использоваться приложениями для выполнения общих задач, таких как открытие веб-страницы, с учётом как согласованности, так и предпочтений пользователя для приложения.
Этот класс содержит функции, предоставляющие простые интерфейсы к этим службам, которые указывают, выполнено ли их выполнение успешно или нет.
Функция openUrl() используется для открытия файлов, расположенных по произвольным URL-адресам в внешних приложениях. Для URL-адресов, соответствующих ресурсам на локальной файловой системе (где схема URL-адреса — "file"), будет использоваться подходящее приложение для открытия файла; в противном случае веб-браузер будет использоваться для получения и отображения файла.
Настройки рабочего стола пользователя управляют тем, открываются ли определённые типы файлов исполняемых файлов для просмотра или выполняются вместо этого. Некоторые среды рабочего стола настроены так, чтобы предотвращать выполнение файлов, полученных по URL-адресам, не являющимся локальными, или запрашивать разрешение пользователя перед этим.
Обработчики URL-адресов
Поведение функции openUrl() может быть настроено для отдельных схем URL-адресов, чтобы приложения могли переопределять стандартное поведение для определённых типов URL-адресов.
Механизм диспетчеризации позволяет использовать только один пользовательский обработчик для каждой схемы URL-адреса; он устанавливается с помощью функции setUrlHandler(). Каждый обработчик реализуется как слот, который принимает только один аргумент QUrl.
Существующие обработчики для каждой схемы могут быть удалены с помощью функции unsetUrlHandler(). Это возвращает поведение обработки для заданной схемы к стандартному поведению.
Эта система упрощает реализацию, например, системы справки. Справка может предоставляться в метках и текстовых браузерах с помощью URL-адресов help://myapplication/mytopic, и благодаря регистрации обработчика становится возможным отображать текст справки внутри приложения:
class MyHelpHandler : public QObject
{
Q_OBJECT
public:
...
public slots:
void showHelp(const QUrl &url);
};
QDesktopServices::setUrlHandler("help", helpInstance, "showHelp"); Если внутри обработчика вы решите, что не можете открыть запрашиваемый URL-адрес, вы можете просто снова вызвать QDesktopServices::openUrl() с тем же аргументом, и он попытается открыть URL-адрес с помощью соответствующего механизма для среды рабочего стола пользователя.
В сочетании с платформами специфичными настройками, схемы, зарегистрированные функцией openUrl() могут также быть доступны другим приложениям, открывая возможности для глубокой связи приложений или очень базового механизма межпроцессного взаимодействия на основе URL.
Примечание: Начиная с Qt 5, storageLocation() и displayName() заменены функциональностью, предоставляемой классом QStandardPaths.
См. также QSystemTrayIcon, QProcess и QStandardPaths.
Документация по функциям-членам
[static] bool QDesktopServices::openUrl(const QUrl &url)
Открывает заданный url в соответствующем веб-браузере для среды рабочего стола пользователя и возвращает true при успешном выполнении; в противном случае возвращает false.
Если URL-адрес относится к локальному файлу (т. е. схема URL-адреса — "file"), то он будет открыт с помощью подходящего приложения, а не веб-браузера.
Следующий пример открывает файл в файловой системе Windows, расположенный по пути, содержащему пробелы:
QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users/Desktop", QUrl::TolerantMode)); Если указан URL-адрес mailto, то для открытия окна составления письма будет использован почтовый клиент пользователя, аналогично тому, как обрабатываются ссылки mailto в веб-браузере.
Например, следующий URL-адрес содержит получателя (user@foo.com), тему (Test) и тело сообщения (Just a test):
mailto:user@foo.com?subject=Test&body=Just a test
Предупреждение: Хотя многие почтовые клиенты могут отправлять вложения и поддерживают Unicode, пользователь может настроить свой клиент без этих функций. Кроме того, у некоторых почтовых клиентов (например, Lotus Notes) возникают проблемы с длинными URL-адресами.
Предупреждение: Значение возврата true указывает на то, что приложение успешно запросило операционную систему открыть URL-адрес во внешнем приложении. Внешнее приложение всё равно может не запуститься или не открыть запрашиваемый URL-адрес. Этот результат не будет сообщён приложению.
Предупреждение: URL-адреса, переданные этой функции на iOS, не будут загружены, если их схемы не указаны в ключе LSApplicationQueriesSchemes файла Info.plist приложения. Дополнительную информацию см. в документации Apple Developer по canOpenURL(_:). Например, следующие строки разрешают URL-адреса со схемой HTTPS:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>https</string>
</array> См. также setUrlHandler().
[static] void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method)
Устанавливает обработчик для заданной scheme, которым является обработчик method, предоставляемый объектом receiver.
Эта функция предоставляет способ настройки поведения openUrl(). Если openUrl() вызывается с URL-адресом со указанной scheme, то указанный method для объекта receiver вызывается вместо запуска внешнего приложения QDesktopServices.
Предоставленный метод должен быть реализован как слот, принимающий только один аргумент QUrl.
class MyHelpHandler : public QObject
{
Q_OBJECT
public:
...
public slots:
void showHelp(const QUrl &url);
};
QDesktopServices::setUrlHandler("help", helpInstance, "showHelp"); Для использования этой функции для получения данных из других приложений на iOS вам также необходимо добавить пользовательскую схему в список CFBundleURLSchemes в файле Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array> Дополнительную информацию см. в документации Apple Developer по Communicating with Other Apps Using Custom URLs.
Если setUrlHandler() используется для установки нового обработчика для схемы, для которой уже существует обработчик, существующий обработчик просто заменяется новым. Поскольку QDesktopServices не владеет обработчиками, объекты не удаляются при замене обработчика.
Обратите внимание, что обработчик всегда будет вызываться из того же потока, что и вызов QDesktopServices::openUrl().
См. также openUrl() и unsetUrlHandler().
[static] void QDesktopServices::unsetUrlHandler(const QString &scheme)
Удаляет ранее установленный обработчик URL-адреса для указанной scheme.
См. также setUrlHandler().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qdesktopservices.html