QDesktopServices Class
QDesktopServices 클래스는 일반적인 데스크톱 서비스에 액세스하기 위한 메서드를 제공합니다. 더 보기...
Header: | #include <QDesktopServices> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
정적 공개 멤버
bool | openUrl(const QUrl &url) |
void | setUrlHandler(const QString &scheme, QObject *receiver, const char *method) |
void | unsetUrlHandler(const QString &scheme) |
상세 설명
많은 데스크톱 환경에서는 애플리케이션이 웹 페이지 열기와 같은 일반적인 작업을 수행하는 데 사용할 수 있는 서비스를 일관성 있고 사용자의 애플리케이션 기본 설정을 고려한 방식으로 제공합니다.
이 클래스에는 이러한 서비스에 대한 간단한 인터페이스를 제공하여 성공 또는 실패 여부를 나타내는 함수가 포함되어 있습니다.
openUrl() 함수는 외부 애플리케이션에서 임의의 URL에 있는 파일을 여는 데 사용됩니다. 로컬 파일링 시스템의 리소스에 해당하는 URL(URL 체계가 "파일"인 경우)의 경우 적절한 애플리케이션이 파일을 여는 데 사용되며, 그렇지 않은 경우 웹 브라우저가 파일을 가져와 표시하는 데 사용됩니다.
사용자의 데스크톱 설정에 따라 특정 실행 파일 유형을 열어 탐색할지 또는 대신 실행할지 여부가 결정됩니다. 일부 데스크톱 환경은 사용자가 로컬이 아닌 URL에서 가져온 파일을 실행하지 못하도록 하거나 실행하기 전에 사용자의 허가를 요청하도록 구성됩니다.
URL 핸들러
openUrl() 함수의 동작을 개별 URL 체계에 맞게 사용자 지정하여 애플리케이션이 특정 유형의 URL에 대한 기본 처리 동작을 재정의할 수 있도록 할 수 있습니다.
디스패치 메커니즘을 사용하면 각 URL 체계에 대해 하나의 사용자 정의 핸들러만 사용할 수 있으며, 이는 setUrlHandler() 함수를 사용하여 설정합니다. 각 핸들러는 단일 QUrl 인수만 허용하는 슬롯으로 구현됩니다.
각 스키마에 대한 기존 핸들러는 unsetUrlHandler() 함수를 사용하여 제거할 수 있습니다. 그러면 지정된 스키마에 대한 처리 동작이 기본 동작으로 돌아갑니다.
이 시스템을 사용하면 예를 들어 도움말 시스템을 쉽게 구현할 수 있습니다. help://myapplication/mytopic URL을 사용하여 레이블 및 텍스트 브라우저에서 도움말을 제공할 수 있으며, 핸들러를 등록하면 애플리케이션 내부에 도움말 텍스트를 표시할 수 있습니다:
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 기반 IPC 메커니즘을 사용할 수 있습니다.
QSystemTrayIcon, QProcess, QStandardPaths 를참조하세요 .
멤버 함수 문서
[static]
bool QDesktopServices::openUrl(const QUrl &url)
사용자의 데스크톱 환경에 적합한 웹 브라우저에서 주어진 url 을 열고 성공하면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
URL이 로컬 파일에 대한 참조인 경우(즉, URL 체계가 "파일"인 경우) 웹 브라우저 대신 적절한 애플리케이션으로 열립니다.
다음 예는 공백이 포함된 경로에 있는 Windows 파일 시스템에 있는 파일을 엽니다:
QDesktopServices::openUrl(QUrl("file:///C:/Program Files", QUrl::TolerantMode));
mailto
URL을 지정하면 웹 브라우저에서 mailto
링크가 처리되는 방식과 유사하게 사용자의 이메일 클라이언트를 사용하여 URL에 지정된 옵션이 포함된 작성기 창을 엽니다.
예를 들어 다음 URL에는 받는 사람(user@foo.com
), 제목(Test
) 및 메시지 본문(Just a test
)이 포함되어 있습니다:
mailto:user@foo.com?subject=Test&body=Just a test
경고: 많은 이메일 클라이언트가 첨부 파일을 보낼 수 있고 유니코드를 인식하지만 사용자가 이러한 기능을 사용하지 않고 클라이언트를 구성했을 수 있습니다. 또한 특정 이메일 클라이언트(예: Lotus Notes)는 긴 URL에 문제가 있습니다.
경고: 반환값이 true
이면 애플리케이션이 운영 체제에 외부 애플리케이션의 URL을 열도록 성공적으로 요청했음을 나타냅니다. 외부 애플리케이션이 여전히 시작되지 않거나 요청된 URL을 열지 못할 수 있습니다. 이 결과는 애플리케이션에 다시 보고되지 않습니다.
경고: iOS에서 이 함수로 전달된 URL은 해당 스키마가 애플리케이션의 Info.plist 파일의 LSApplicationQueriesSchemes
키에 나열되어 있지 않으면 로드되지 않습니다. 자세한 내용은 canOpenURL: 에 대한 Apple 개발자 문서를 참조하세요. 예를 들어, 다음 줄은 HTTPS 체계를 사용하는 URL을 활성화합니다:
<key>LSApplicationQueriesSchemes</key> <array> <string>https</string> </array>
참고: 안드로이드 누가(SDK 24) 이상의 경우, file
스키마의 URL은 공유 가능한 content
스키마 URI를 먼저 얻으려고 시도하는 FileProvider를 사용하여 열립니다. 따라서 이름 충돌을 피하기 위해 Android용 Qt는 ${applicationId}.qtprovider
권한을 가진 파일 공급자를 정의하고 applicationId
을 앱의 패키지 이름으로 사용합니다. 자세한 내용은 파일 공유 설정하기를 참조하세요.
setUrlHandler()도 참조하십시오 .
[static]
void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method)
지정된 scheme 의 핸들러를 receiver 객체가 제공하는 핸들러 method 로 설정합니다.
이 함수는 openUrl()의 동작을 사용자 정의하는 방법을 제공합니다. openUrl ()가 지정된 scheme URL과 함께 호출되면 외부 애플리케이션을 실행하는 QDesktopServices 대신 receiver 객체의 지정된 method 가 호출됩니다.
제공된 메서드는 하나의 QUrl 인수만 허용하는 슬롯으로 구현해야 합니다.
class MyHelpHandler : public QObject { Q_OBJECT public: // ... public slots: void showHelp(const QUrl &url); };
이미 핸들러가 있는 스키마에 대해 새 핸들러를 설정하기 위해 setUrlHandler()를 사용하는 경우 기존 핸들러는 단순히 새 핸들러로 대체됩니다. QDesktopServices 는 핸들러의 소유권을 가지지 않으므로 핸들러가 교체될 때 객체가 삭제되지 않습니다.
처리기는 항상 QDesktopServices::openUrl()를 호출하는 동일한 스레드 내에서 호출된다는 점에 유의하세요.
처리기 객체를 소멸하기 전에 unsetUrlHandler()를 호출해야 처리기 객체의 소멸이 이를 사용하는 openUrl()의 동시 호출과 겹치지 않습니다.
iOS 및 macOS
iOS/macOS에서 다른 앱으로부터 데이터를 수신하는 데 이 함수를 사용하려면 Info.plist 파일의 CFBundleURLSchemes
목록에 사용자 정의 스키마를 추가해야 합니다:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array>
자세한 내용은 앱의 사용자 지정 URL 구성표 정의에 대한 Apple 개발자 문서를 참조하세요.
경고: http 및 https를 포함하여 잘 알려진 일부 URL 체계에 대한 지원을 요청할 수 없습니다. 이는 유니버설 링크에만 허용됩니다.
http 및 https에 대한 지원을 요청하려면 Info.plist 파일에서 위의 항목은 허용되지 않습니다. 이는 자격 파일에 도메인을 추가할 때만 가능합니다:
<key>com.apple.developer.associated-domains</key> <array> <string>applinks:your.domain.com</string> </array>
iOS/macOS는 애플리케이션이 설치될 때 도메인에서 /.well-known/apple-app-site-association을 검색합니다. https://your.domain.com/help?topic=ABCDEF
을 청취하려면 다음 콘텐츠를 제공해야 합니다:
{ "applinks": { "apps": [], "details": [{ "appIDs" : [ "ABCDE12345.com.example.app" ], "components": [{ "/": "/help", "?": { "topic": "?*"} }] }] } }
자세한 내용은 연결된 도메인 지원에 대한 Apple 개발자 문서를 참조하세요.
Android
Android에서 다른 앱으로부터 데이터를 수신하는 데 이 기능을 사용하려면 앱 매니페스트의 activity
에 하나 이상의 인텐트 필터를 추가해야 합니다:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="your.domain.com" android:port="1337" android:path="/help"/> </intent-filter>
자세한 내용은 앱 콘텐츠에 대한 딥링크 생성에 대한 안드로이드 개발자 문서를 참조하세요.
사용자가 앱을 선택하지 않고도 Android 앱에서 해당 콘텐츠를 즉시 열려면 링크를 인증해야 합니다. 확인을 활성화하려면 의도 필터에 추가 매개 변수를 추가합니다:
<intent-filter android:autoVerify="true">
Android는 애플리케이션이 설치될 때 https://your.domain.com/.well-known/assetlinks.json
을 찾습니다. https://your.domain.com:1337/help
을 청취하려면 다음 콘텐츠를 제공해야 합니다:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
자세한 내용은 안드로이드 앱 링크 확인에 대한 안드로이드 개발자 문서를 참조하세요.
openUrl() 및 unsetUrlHandler()도 참조하세요 .
[static]
void QDesktopServices::unsetUrlHandler(const QString &scheme)
지정된 scheme 에 대해 이전에 설정된 URL 핸들러를 제거합니다.
scheme 에 등록된 핸들러 객체가 소멸되기 전에 이 함수를 호출하면 동시 openUrl() 호출이 소멸된 핸들러 객체를 계속 호출하는 것을 방지할 수 있습니다.
setUrlHandler()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.