Spec-Zone.ru › Qt 5.12

Класс QDesktopServices

Класс QDesktopServices предоставляет методы для доступа к общим службам рабочего стола. Подробнее...

Заголовок: #include <QDesktopServices>
qmake: QT += gui
С момента: Qt 4.2
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Статические публичные члены

bool openUrl(const QUrl &url)
void setUrlHandler(const QString &scheme, QObject *receiver, const char *method)
void unsetUrlHandler(const QString &scheme)

Подробное описание

Класс QDesktopServices предоставляет методы для доступа к общим службам рабочего стола.

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

Этот класс содержит функции, которые предоставляют простые интерфейсы к этим службам, указывающие, осуществились ли они успешно или нет.

Функция 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(), также могут быть экспонированы другим приложениям, что открывает возможность для глубокой ссылки приложений или очень простого механизма межпроцессного взаимодействия (IPC) на основе 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));

Если указан mailto URL-адрес, клиент электронной почты пользователя будет использован для открытия окна составления письма, содержащего параметры, указанные в 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, то вызывается указанный 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.12/qdesktopservices.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API