Класс 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, для открытия окна составления сообщения с указанными в URL-адресе опциями будет использован почтовый клиент пользователя, аналогично тому, как обрабатываются ссылки 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, то вместо запуска внешнего приложения в объекте receiver вызывается заданный method.
Предоставленный метод должен быть реализован как слот, принимающий только один аргумент 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 по Взаимодействие с другими приложениями с помощью настраиваемых URL-адресов.
Если функция 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.14/qdesktopservices.html