Qt WebEngine 기능
Qt WebEngine 는 다음 기능을 지원합니다:
- 오디오 및 비디오 코덱
- 웹엔진 드라이버
- 크롬 개발 도구
- 클라이언트 인증서
- 사용자 정의 스키마
- 드래그 앤 드롭
- 파비콘
- 전체 화면
- 하드웨어 가속
- HTML5 DRM
- HTML5 지리적 위치
- HTML5 웹소켓
- HTTP/2 프로토콜
- 로컬 스토리지
- 기본 대화 상자
- PDF 파일 보기
- 페이지 수명 주기 API
- PDF로 인쇄
- 프로세스 모델
- 맞춤법 검사기
- Touch
- 소스 보기
- 웹 알림
- WebGL
- WebRTC
오디오 및 비디오 코덱
Qt WebEngine 은 H.264 및 MPEG layer-3(MP3)와 같은 필수 독점 오디오 및 비디오 코덱이 활성화된 경우에만 MPEG-4 Part 14(MP4) 파일 형식을 지원합니다. 전용 코덱은 Qt를 구성할 때 configure
도구에 다음 옵션을 전달하여 활성화할 수 있습니다:
-webengine-proprietary-codecs
예를 들어, 최상위 레벨에서 빌드하기 위해 Qt를 구성할 때 다음 옵션을 전달할 수 있습니다:
configure -webengine-proprietary-codecs
자세한 내용은 Qt 구성 옵션을 참조하십시오.
cmake를 사용하여 Qt WebEngine 모듈만 빌드하는 경우 다음 명령을 사용하여 구성 및 빌드할 수 있습니다(이 예에서는 Qt WebEngine 소스 코드가 C:\qt\qtwebengine
)에 있습니다:
qt-configure-module C:\qt\qtwebengine -webengine-proprietary-codecs cmake --build . --parallel
경고: 독점 코덱 라이브러리를 배포할 때는 해당 라이브러리에 대한 라이선스를 취득해야 합니다.
FFmpeg는 오디오 및 비디오를 녹화, 변환 및 스트리밍하는 크로스 플랫폼 솔루션입니다. 여러 코덱과 함께 사용하도록 구성할 수 있으므로 코덱 라이브러리와 함께 배포하는 동안 라이선스 문제가 발생할 수 있습니다. 일부 코덱의 경우 OpenH264와 같은 오픈 소스 구현을 사용할 수 있습니다.
WebEngineDriver
WebEngineDriver를 사용하면 여러 브라우저에서 웹 사이트 테스트를 자동화할 수 있습니다. 웹엔진드라이버는 크롬드라이버를 기반으로 하며 동일한 방식으로 사용할 수 있습니다. ChromeDriver와 그 사용에 대한 자세한 내용은 ChromeDriver 사용자 사이트를 참조하세요.
웹엔진드라이버는 Qt WebEngine 기반 브라우저에 연결할 수 있도록 크롬드라이버에 비해 약간의 수정이 있습니다. Simple Browser 또는 Nano Browser와 같은 Qt WebEngine 예제 브라우저와 호환됩니다.
브라우저 자동화는 셀레늄 웹드라이버와 같은 웹드라이버 클라이언트를 통해 스크립팅됩니다. 예를 들어 웹엔진드라이버는 셀레늄 웹드라이버의 파이썬 언어 바인딩과 함께 사용할 수 있습니다:
from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service(executable_path='QTDIR/libexec/webenginedriver') options = webdriver.ChromeOptions() options.binary_location = 'path/to/browser_binary' driver = webdriver.Chrome(service=service, options=options) driver.get("http://www.google.com/") driver.quit()
이 예제에서는
executable_path
는 웹엔진드라이버의 바이너리 경로로 설정해야 합니다.QTDIR
는 Qt가 설치된 디렉토리options.binary_location
는 브라우저의 바이너리 경로로 설정해야 합니다.
참고: Windows의 경우: executable_path='QTDIR/bin/webenginedriver.exe'
스크립트를 실행하기 전에 QTWEBENGINE_REMOTE_DEBUGGING
환경 변수를 설정해야 합니다. 이 값은 브라우저와 WebEngineDriver가 서로 통신할 때 사용하는 포트 번호입니다.
export QTWEBENGINE_REMOTE_DEBUGGING=12345
스크립트를 실행하면 지정된 웹 브라우저가 열리고 Google 웹 사이트가 로드됩니다.
원격 디버깅 포트가 설정된 상태에서 시작된 경우 이미 실행 중인 브라우저에 WebEngineDriver를 연결할 수도 있습니다. options.debugger_address
을 스크립트에서 원격 디버깅 주소로 설정해야 합니다:
options.debugger_address = 'localhost:12345'
이 경우 브라우저가 이미 실행 중이므로 options.binary_location
을 설정해서는 안 됩니다. options.debugger_address
이 설정된 경우 환경 변수 QTWEBENGINE_REMOTE_DEBUGGING
는 웹엔진드라이버에서 사용되지 않습니다.
참고: 웹엔진드라이버는 Qt WebEngine 에서 사용하는 것과 동일한 버전의 Chromium으로 빌드해야 합니다.
Chromium 개발 도구
Chromium 개발 도구는 웹 콘텐츠의 레이아웃 및 성능 문제를 검사하고 디버깅할 수 있는 기능을 제공합니다.
이 기능은 --remote-debugging-port=[your-port]
명령줄 옵션을 사용하여 Qt WebEngine 애플리케이션을 실행하거나 환경 변수 QTWEBENGINE_REMOTE_DEBUGGING
를 설정한 다음 Chromium 기반 브라우저(예: Simple Browser 또는 Nano Browser)를 사용하여 http://localhost:[your-port]
에 연결하여 테스트할 수 있습니다.
참고: WebEngine 명령줄 옵션은 --webEngineArgs
옵션 뒤에 지정해야 하며, 이는 사용자의 애플리케이션별 옵션을 WebEngine 의 옵션과 구분하는 데 사용됩니다.
--webEngineArgs --remote-debugging-port=5000
원격 디버깅 중 WebSocket 오류를 방지하려면 추가 명령줄 인수를 추가하세요 --remote-allow-origins=<origin>[,<origin>, ...]
, 여기서 <origin>
은 요청 출처를 나타냅니다. 모든 오리진으로부터의 연결을 허용하려면 --remote-allow-origins=*
을 사용합니다. 아무것도 지정하지 않으면 원격 디버깅이 활성화되면 Qt WebEngine 명령줄 인수에 --remote-allow-origins=*
을 추가하여 모든 오리진으로부터의 요청을 허용합니다.
크롬 개발자 도구 페이지는 애플리케이션 내에서 표시할 수도 있습니다. 이를 설정하려면 검사할 페이지에 QWebEnginePage::setInspectedPage()를 호출하여 this
페이지에 개발자 도구를 암시적으로 로드하거나 QWebEnginePage::setDevToolsPage()를 호출하여 this
페이지를 검사할 수 있습니다.
각 QML 속성은 WebEngineView.devToolsView 및 WebEngineView.inspectedView 입니다.
자세한 내용은 Qt WebEngine 디버깅 및 프로파일링을 참조하세요.
클라이언트 인증서
일부 웹 서버, 특히 많은 인트라넷 사이트에서는 클라이언트가 클라이언트 인증서라고 하는 인증서로 자신을 인증하도록 요구합니다. Qt WebEngine 은 macOS 및 Windows에서는 시스템 설정에 설치된 클라이언트 인증서를, Linux에서는 NSS 데이터베이스에 설치된 인증서를 읽습니다. 인증서는 pk12util
도구를 사용하여 NSS 데이터베이스에 설치할 수 있습니다.
기본적으로 Qt WebEngine 에서는 서버에 클라이언트 인증서를 제공하지 않는데, 이는 사용자를 고유하게 식별하고 개인정보 보호 기대치를 위반할 수 있기 때문입니다.
클라이언트 인증서에 대한 지원을 활성화하려면 애플리케이션에서 QWebEnginePage::selectClientCertificate 또는 WebEngineView.selectClientCertificate 신호를 수신하고 제공되는 인증서 중 하나를 선택해야 합니다. 신뢰할 수 없는 웹사이트로 이동할 수 있는 애플리케이션의 경우 원격 서버에 사용자를 고유하게 식별하기 전에 항상 사용자에게 선택권을 부여하는 것이 좋습니다.
Qt WebEngine 에서는 시스템 설정에 저장된 클라이언트 인증서 외에도 인메모리 저장소도 제공합니다. QWebEngineClientCertificateStore 인스턴스는 QWebEngineProfile::clientCertificateStore() 메서드를 사용하여 얻을 수 있습니다. 애플리케이션은 이 클래스를 사용하여 QWebEngineClientCertificateStore::add() 호출로 새 인증서를 추가할 수 있습니다. selectClientCertificate
호출 시 Qt WebEngine 에는 시스템 및 인메모리에 저장된 클라이언트 인증서가 모두 나열됩니다.
자세한 구현 내용은 클라이언트 인증서 예시를 참조하세요.
사용자 정의 스키마
Qt WebEngine 를 사용하면 애플리케이션에서 특수 보안 정책 및 전송 메커니즘을 사용하여 자체 사용자 지정 URL 스키마를 정의할 수 있습니다.
사용자 지정 스키마를 사용하여 일반적인 웹 보안 정책을 모두 갖춘 대체 네트워크 프로토콜, 사용자 인터페이스 구성 요소를 표시하거나 정보를 디버깅하기 위한 권한 있는 내부 스키마, 추가 제한이 있는 샌드박스가 적용된 스키마 등을 구현할 수 있습니다.
자세한 내용은 QWebEngineUrlScheme 및 QWebEngineUrlSchemeHandler 을 참조하세요.
드래그 앤 드롭
Qt WebEngine 은 HTML5 드래그 앤 드롭을 지원합니다.
이 기능은 HTML5 데모 - 드래그 앤 드롭, HTML5 데모 - 간단한 드래그 앤 드롭 또는 HTML5 데모 - 드래그 앤 드롭, 자동 업로드와 같은 HTML5 데모를 Simple Browser 또는 Nano 브라우저에서 열어 테스트해 볼 수 있습니다.
파일을 브라우저로 드래그하는 것은 실제로 HTML5의 일부가 아니지만 지원됩니다. HTML5 데모 - 파일 API를 열어 테스트할 수 있습니다.
이 기능에 대한 지원은 Qt 5.7.0에서 추가되었습니다.
파비콘
Qt WebEngine 은 웹 사이트 URL 아이콘인 파비콘을 지원합니다. 각 아이콘은 QWebEngineProfile 내부 데이터베이스에 저장되며 QWebEnginePage::icon() 호출 또는 현재 로드된 콘텐츠의 WebEngineView.icon 속성을 사용하여 액세스할 수 있습니다.
또한 Qt WebEngine 에서는 내부 프로필의 데이터베이스에 이미 저장된 아이콘에 액세스하기 위한 API를 제공합니다.
참고: 아이콘 데이터베이스는 비공식 프로필에는 사용할 수 없습니다.
QML 파비콘 처리
아이콘에 액세스하기 위해 QQuickImageProvider
이 등록되어 있습니다. 이 공급자는 스키마가 "image:"이고 호스트가 "favicon"인 특수 URL로 액세스할 수 있습니다.
Image { source: "image://favicon/url" }
url
은 파비콘의 URL이 될 수 있습니다:
Image { source: "image://favicon/https://www.qt.io/hubfs/2016_Qt_Logo/qt_logo_green_rgb_16x16.png" }
url
은 해당 아이콘에 액세스하기 위한 페이지 URL일 수도 있습니다:
Image { source: "image://favicon/https://www.qt.io/" }
두 개 이상의 아이콘을 사용할 수 있는 경우 Image::sourceSize 속성을 지정하여 원하는 크기의 아이콘을 선택할 수 있습니다. Image::sourceSize 을 지정하지 않거나 0으로 지정하면 사용 가능한 가장 큰 아이콘이 선택됩니다.
이미지 제공업체는 기존 WebEngineView 인스턴스에서 요청된 아이콘을 조회합니다. 먼저 현재 표시된 아이콘과 일치하는지 확인합니다. 일치하는 아이콘을 찾지 못하면 데이터베이스에서 아이콘을 요청합니다. 각 프로필에는 고유한 아이콘 데이터베이스가 있으며 영구 저장소에 저장되므로 네트워크 연결 없이도 저장된 아이콘에 액세스할 수 있습니다. 아이콘을 데이터베이스에 저장하려면 아이콘을 미리 로드해야 합니다.
C++ 파비콘 처리
사용자는 QWebEngineProfile::requestIconForPageURL() 또는 QWebEngineProfile::requestIconForIconURL() 호출을 사용하여 각 QWebEngineProfile 에 대해 이전에 로드된 콘텐츠에서 아이콘을 요청할 수 있습니다. 프로필의 데이터베이스는 영구 저장소에 저장되며 네트워크 연결 없이도 액세스할 수 있습니다.
전체 화면
Qt WebEngine 은 전체 화면 모드에서 웹 콘텐츠를 볼 수 있도록 지원합니다. 자세한 내용은 WebEngineSettings.fullscreenSupportEnabled, WebEngineView.fullScreenRequested, QWebEngineSettings::FullScreenSupportEnabled, QWebEnginePage::fullScreenRequested 을 참조하세요.
이 기능은 비디오 플레이어 또는 나노 브라우저에서 YouTube의 동영상을 재생하고 전체 화면 아이콘을 클릭하여 전체 화면 모드로 전환하여 테스트할 수 있습니다.
이 기능에 대한 지원은 Qt 5.6.0에서 추가되었습니다.
하드웨어 가속
QtWebEngine 는 콘텐츠 렌더링에 하드웨어 가속을 사용하려고 시도합니다. OpenGL
또는 OpenGLES
API를 사용하여 GPU에서 렌더링 호출을 실행합니다. 하드웨어가 필요한 OpenGL 기능 집합을 충족하지 못하는 경우 소프트웨어 렌더링이 대체로 사용됩니다. 사용자는 chrome://gpu
내부 페이지를 로드하여 현재 하드웨어 가속 상태를 확인할 수 있습니다. 또한 disable-gpu
스위치를 사용하여 QTWEBENGINE_CHROMIUM_FLAGS
으로 가속을 명시적으로 비활성화할 수 있습니다. 예를 들어 Linux에서:
export QTWEBENGINE_CHROMIUM_FLAGS=--disable-gpu
HTML5 DRM
Qt WebEngine 은 Widevine CDM 플러그인을 설치한 경우 DRM으로 보호된 동영상 시청을 지원합니다. CDM 플러그인은 DRM으로 보호된 콘텐츠를 표시하기 위한 플래시 기반 플러그인을 대체하는 플러그인입니다. 바이너리 형식으로만 제공되므로 DRM 복호화 구현 세부 정보를 숨길 수 있습니다. 타사 또는 Google Chrome 설치에서 얻을 수 있습니다.
Qt WebEngine 시작 시 기본 Google Chrome 설치 디렉토리 또는 Linux 배포판 특정 경로와 같이 잘 알려진 위치에서 Widevine CDM 플러그인을 찾습니다. 그러나 플러그인 위치는 widevine-path
을 사용하여 QTWEBENGINE_CHROMIUM_FLAGS
으로 전달할 수도 있습니다.
Windows의 경우
set QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="C:/some path/widevinecdm.dll"
Linux의 경우
export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.so"
macOS의 경우:
export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.dylib"
DRM 서비스에서 가장 일반적으로 사용되는 동영상 형식인 H.264에는 전용 오디오 및 동영상 코덱이 필요합니다. 코덱 활성화에 대한 자세한 내용은 오디오 및 비디오 코덱을 참조하세요.
이 기능은 캐스트랩스, 스완크 모션 픽처스, 또는 비트무빈 플레이어의 심플 브라우저 또는 나노 브라우저에서 동영상을 재생하여 테스트할 수 있습니다.
이 기능에 대한 지원은 Qt 5.7.0에 추가되었습니다.
HTML5 지리적 위치
Qt WebEngine 은 자바스크립트 지오로케이션 API를 지원하며 Qt Positioning 를 백엔드로 사용합니다. HTML5 지오로케이션은 기본적으로 비활성화되어 있습니다. 이를 명시적으로 허용하려면 애플리케이션이 QWebEnginePage::permissionRequested 을 수신해야 합니다. QWebEnginePermission::PermissionType::Geolocation 유형의 권한 요청이 수신되면 수신된 객체에서 QWebEnginePermission::grant()를 호출하여 필요한 권한을 부여할 수 있습니다.
Qt WebEngine 이 Qt Positioning 지원으로 빌드된 경우 지도를 사용하여 사용자의 현재 위치를 찾도록 허용하여 이 기능을 테스트할 수 있습니다.
참고: Windows 11에서는 설정을 활성화하여 지도 예제에 Windows 위치 서비스에 대한 액세스 권한을 부여합니다. 설정 앱의 Privacy & Security > Location 에서 Location services, Let apps access your location 및 Let desktop apps access your location 를 활성화합니다.
이와 같은 백엔드 설정은 Qt Positioning 에서 GPS 또는 IP 기반 위치와 같은 가능한 백엔드 설정을 확인하세요.
이 기능에 대한 지원은 Qt 5.5.0에서 추가되었습니다.
HTML5 웹소켓
Qt WebEngine 은 ws://
또는 wss://
프로토콜을 사용하여 웹소켓 서버와 통신할 수 있도록 웹소켓 자바스크립트 API를 지원합니다. 또한 Qt WebChannel 및 Qt WebSockets 과의 통합을 통해 JavaScript와 애플리케이션의 네이티브 측 간의 통신이 가능합니다.
Qt WebChannel 모듈에는 채팅 서버와 웹 기반 채팅 클라이언트에 대한 좋은 예가 있습니다. 클라이언트는 Qt WebEngine 의 예제 브라우저(예: 심플 브라우저 또는 나노 브라우저)에서 바로 작동합니다.
HTTP/2 프로토콜
Qt WebEngine 은 HTTP/2 프로토콜의 크롬 구현을 지원합니다.
이 기능은 Simple Browser 또는 Nano Browser에서 Akamai HTTP/2 데모와 같은 HTTP/2 데모를 열어 테스트할 수 있습니다.
로컬 스토리지
Qt WebEngine 는 만료일 없이 키-값 쌍을 Local Storage
에 저장하는 기능을 지원합니다. 이는 웹 스토리지 API의 일부로, 사용자는 Window.localStorage
JavaScript 속성을 사용하여 지정된 도메인에 대한 Storage
개체에 액세스할 수 있습니다. 저장된 데이터는 페이지 또는 브라우저 애플리케이션이 닫힌 후에도 유지됩니다.
Local
저장소는 QWebEngineSettings::LocalStorageEnabled 설정으로 비활성화할 수도 있습니다. 또한 QWebEngineProfile::setPersistentStoragePath 호출을 통해 저장 경로를 조정할 수 있습니다.
QWebEngineProfile profile("MyProfile"); profile.settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, isEnabled); profile.setPersistentStoragePath("/path/to/storage");
Qt WebEngine Application 패널을 방문하여 Local Storage 메뉴를 확장하면 Qt WebEngine 개발자 도구를 사용하여 Local Storage
의 콘텐츠를 쉽게 조사할 수 있는 방법도 제공합니다.
기본 대화 상자
웹 페이지에서 다음과 같은 기능에 대한 대화 상자를 요청할 수 있습니다:
- HTTP 및 프록시 인증을 위한 사용자 자격 증명 입력
- JavaScript 경고, 확인 대화 상자 및 프롬프트 표시
- 색상 선택
- 파일 선택
- 양식 유효성 검사 메시지 표시
Qt WebEngine 는 이러한 기능에 대한 표준 대화 상자를 제공합니다. 위젯 기반 애플리케이션에서 표준 대화 상자는 QDialog 를 기반으로 하는 반면, Qt Quick 애플리케이션에서는 Qt Quick Controls 1 또는 Qt Quick Controls 2(Qt 5.8 이후)를 기반으로 할 수 있습니다. 후자는 eglfs
플랫폼에서만 사용됩니다.
Qt Quick Controls 1 또는 Qt Quick Controls 2 기반 대화 상자를 명시적으로 강제하려면 QTWEBENGINE_DIALOG_SET
환경 변수를 QtQuickControls1
또는 QtQuickControls2
로 설정합니다.
Qt WebEngine 위젯 대화 상자는 QWebEnginePage::chooseFiles(), QWebEnginePage::javaScriptAlert(), QWebEnginePage::javaScriptConfirm() 및 QWebEnginePage::javaScriptPrompt() 함수를 다시 구현하여 사용자 정의할 수 있습니다.
Qt 5.8부터는 WebEngineView::authenticationDialogRequested(), WebEngineView::javaScriptDialogRequested(), WebEngineView::colorDialogRequested(), WebEngineView::fileDialogRequested() 및 WebEngineView::formValidationMessageRequested() 시그널에 연결하여 Qt Quick 대화 상자를 사용자 지정할 수 있습니다.
PDF 파일 보기
Qt WebEngine 는 PDF 문서로 이동하여 보기를 지원합니다. 이 기능은 Chromium 확장 API와 PDF 뷰어 플러그인을 사용하여 PDF 문서를 표시합니다. 심플 브라우저 또는 나노 브라우저에서 테스트할 수 있습니다.
이 기능을 사용하려면 QWebEngineSettings::PluginsEnabled 또는 WebEngineSettings::pluginsEnabled 을 사용하여 플러그인 로딩을 활성화해야 합니다.
이 기능은 QWebEngineSettings::PdfViewerEnabled 또는 WebEngineSettings::pdfViewerEnabled 설정을 통해 켜거나(기본값) 끌 수 있습니다.
이 기능에 대한 지원은 Qt 5.13.0에 추가되었습니다.
페이지 라이프사이클 API
Qt WebEngine 는 사용자 에이전트가 백그라운드 페이지를 고정하거나 폐기하여 리소스 소비를 줄일 수 있도록 하는 HTML 표준의 작업 중인 확장인 페이지 수명 주기 API 사양을 지원합니다. 이 기능은 위젯과 QML API에 모두 노출되어 있습니다.
사용 중인 QML API의 예는 웹엔진 수명 주기 예시를 참조하세요.
이 기능에 대한 지원은 Qt 5.14.0에 추가되었습니다.
라이프사이클 상태 개요
각 WebEngineView 항목(또는 QWebEnginePage 객체)은 활성, 고정 또는 폐기된 세 가지 수명 주기 상태 중 하나에 속할 수 있습니다. 이러한 상태는 CPU의 절전 상태와 마찬가지로 웹 보기의 리소스 사용량을 제어합니다.
활성 상태는 웹 보기의 제한이 없는 일반적인 상태입니다. 표시되는 모든 웹 보기는 아직 로드가 완료되지 않은 모든 웹 보기와 마찬가지로 항상 활성 상태입니다. 보이지 않는 유휴 웹 보기만 다른 수명 주기 상태로 전환할 수 있습니다.
고정 상태는 CPU 사용량이 낮은 상태입니다. 이 상태에서는 대부분의 HTML 작업 소스가 일시 중단(고정)되며, 그 결과 대부분의 DOM 이벤트 처리 및 JavaScript 실행도 일시 중단됩니다. 이 상태에서는 렌더링이 불가능하므로 웹 보기가 보이지 않아야 정지 상태가 됩니다.
폐기된 상태는 리소스를 극도로 절약하는 상태입니다. 이 상태에서는 웹 보기의 브라우징 컨텍스트가 삭제되고 해당 렌더러 하위 프로세스가 종료됩니다. 이 상태의 CPU 및 메모리 사용량은 사실상 0으로 감소합니다. 이 상태를 종료하면 웹 페이지가 자동으로 다시 로드됩니다. 폐기된 상태로 들어가고 나가는 과정은 웹 보기의 검색 기록을 직렬화하고 보기를 파괴한 다음 새 보기를 만들고 기록을 복원하는 것과 유사합니다.
WebEngineView::LifecycleState 를 참조하세요. 위젯 API에서 이에 해당하는 것은 QWebEnginePage::LifecycleState 입니다.
lifecycleState
및 recommendedState
속성
WebEngineView 유형의 lifecycleState 속성은 웹 보기의 현재 수명 주기 상태를 제어하는 읽기-쓰기 속성입니다. 이 속성은 전환할 수 있는 상태에 가능한 한 제한을 두지 않도록 설계되었습니다. 예를 들어, 현재 백그라운드에서 음악을 재생 중인 웹 보기를 고정하여 음악을 중지할 수 있습니다. 사용자가 볼 수 있는 백그라운드 활동을 방해하지 않는 덜 공격적인 리소스 절약 전략을 구현하려면 recommendedState 속성을 사용해야 합니다.
WebEngineView 유형의 recommendedState 속성은 웹 보기의 현재 활동을 고려하여 lifecycleState 속성에 대한 안전 한도를 계산하는 읽기 전용 속성입니다. 따라서 백그라운드에서 음악을 재생하는 웹 보기의 예에서 더 공격적인 상태는 음악을 중지하므로 권장 상태는 Active
입니다. 애플리케이션이 백그라운드 활동을 중단하지 않으려면 웹 뷰를 recommendedState 보다 더 적극적으로 리소스를 절약하는 수명 주기 상태로 설정하지 않아야 합니다.
WebEngineView::lifecycleState 및 WebEngineView::recommendedState 을 참조하세요. 위젯 API에 해당하는 것은 QWebEnginePage::lifecycleState 와 QWebEnginePage::recommendedState 입니다.
DOM 확장
lifecycleState 속성은 페이지 수명 주기 API 사양에 연결되어 freeze
및 resume
라는 두 개의 새로운 DOM 이벤트를 지정하고 새로운 Document.wasDiscarded
부울 속성을 추가합니다. freeze
및 resume
이벤트는 Active
에서 Frozen state
로 또는 그 반대로 전환할 때 발생합니다. Document.wasDiscarded
속성은 Discarded
상태에서 Active
상태로 전환할 때 true
로 설정됩니다.
PDF로 인쇄
Qt WebEngine 는 웹 페이지를 PDF 파일로 인쇄하는 기능을 지원합니다. 자세한 내용은 QWebEnginePage::printToPdf() 및 WebEngineView.printToPdf 을 참조하세요.
이 기능은 Html2Pdf를 사용하여 테스트할 수 있습니다.
이 기능에 대한 지원은 Qt 5.7.0에 추가되었습니다.
프로세스 모델
Qt WebEngine 은 여러 OS 프로세스를 사용하여 웹 사이트를 서로 및 클라이언트 애플리케이션으로부터 분리하여 보안과 견고성을 향상시킵니다. 다음과 같은 프로세스 모델, 즉 웹 사이트를 OS 프로세스 간에 분할하는 방법이 지원됩니다:
사이트 인스턴스당 프로세스
기본 모델입니다. 별도의 사이트의 페이지가 별도의 프로세스에 배치되고 동일한 사이트에 대한 별도의 방문도 격리됩니다.
두 웹 페이지가 동일한 등록 도메인 이름(예: wikipedia.org
)과 체계(예: https
)에서 시작된 경우 동일한 사이트에 속하는 것으로 간주됩니다. 이는 동일 출처 정책과 유사하지만 하위 도메인은 무시됩니다. 예를 들어 https://en.wikipedia.org/
및 https://de.wikipedia.org/
모두 동일한 사이트에 속하게 됩니다.
사이트 인스턴스는 동일한 사이트에 속하는 웹 페이지의 모음입니다. 예를 들어 애플리케이션이 QWebEnginePage::setUrl 을 통해 명시적으로 Qt WebEngine 으로 URL을 로드하면 해당 페이지에 대한 새 사이트 인스턴스가 만들어집니다. 그러나 사용자가 페이지에서 동일한 사이트 링크를 클릭하면 기존 사이트 인스턴스가 더 많은 페이지로 확장될 뿐입니다.
예를 들어 단순 브라우저 예제에서 사용자가 두 개의 탭을 열고 URL 표시줄에 https://en.wikipedia.org/
을 명시적으로 입력하면 두 탭 모두 별도의 OS 프로세스를 갖게 됩니다(URL을 명시적으로 입력하면 새 사이트 인스턴스가 생성되기 때문). 그러나 사용자가 동일한 사이트 링크를 가운데 클릭하여 더 많은 탭을 열면 이러한 새 탭은 동일한 OS 프로세스를 공유합니다(사용자 상호 작용이 기존 사이트 인스턴스를 확장하기 때문입니다).
사이트별 프로세스
별도의 사이트의 페이지는 별도의 프로세스에 배치됩니다. 사이트 인스턴스별 프로세스와 달리 동일한 사이트에 대한 모든 방문은 OS 프로세스를 공유합니다.
이 모델의 장점은 더 많은 웹 페이지가 프로세스를 공유하기 때문에 메모리 사용량이 줄어든다는 점입니다. 단점으로는 보안, 견고성 및 응답성이 저하된다는 점이 있습니다.
이 모델을 사용하려면 명령줄 인수 --process-per-site
를 사용합니다. 명령줄 인수 사용을 참조하세요.
단일 프로세스
디버깅 목적으로만 명령줄 인수 --single-process
를 사용하여 단일 프로세스 모드를 활성화할 수 있습니다. 명령줄 인수 사용 및 Qt WebEngine 디버깅 및 프로파일링을 참조하세요.
맞춤법 검사기
Qt WebEngine 는 사용자가 맞춤법 검사된 메시지를 제출할 수 있도록 HTML 양식에 맞춤법 검사 지원을 통합하는 기능을 지원합니다. 사용자가 밑줄이 그어진 철자가 틀린 단어를 클릭하면 기본 컨텍스트 메뉴에 최대 4개의 제안이 표시됩니다. 하나를 선택하면 철자가 틀린 단어가 대체됩니다.
맞춤법 검사기가 맞춤법을 확인하려면 사전이 필요합니다. Hunspell 프로젝트의 사전을 지원하지만 특수 바이너리 형식으로 컴파일해야 합니다. Hunspell 사전은 두 개의 파일로 구성됩니다:
- 해당 언어의 단어가 포함된 사전인
.dic
파일 - 사전에서 특수 플래그의 의미를 정의하는
.aff
파일
이 두 파일은 Qt와 함께 제공되는 qwebengine_convert_dict
도구를 사용하여 bdic
형식으로 변환할 수 있습니다. Qt WebEngine 맞춤법 검사기가 초기화되면 bdict
사전을 로드하고 일관성을 확인하려고 시도합니다.
QTWEBENGINE_DICTIONARIES_PATH
이 설정되어 있으면 맞춤법 검사기는 다른 곳을 찾지 않고 지정된 디렉터리에 있는 사전을 사용합니다. 그렇지 않으면 실행 파일을 기준으로 qtwebengine_dictionaries 디렉터리가 있는 경우 이 디렉터리를 사용합니다. 존재하지 않으면 QT_INSTALL_PREFIX/qtwebengine_dictionaries
을 찾습니다.
macOS에서는 빌드 시 Qt WebEngine 을 어떻게 구성했는지에 따라 맞춤법 검사 데이터를 찾는 방법이 두 가지가 있습니다:
- Hunspell 사전(기본값) - 다른 플랫폼에서와 마찬가지로 .bdic 사전이 사용됩니다.
- 네이티브 사전 - macOS 맞춤법 검사 API가 사용됩니다(즉, 결과는 설치된 OS 사전에 따라 달라집니다).
따라서 macOS Hunspell의 경우 Qt WebEngine 은 애플리케이션 번들 Resources
디렉터리 내에 있는 qtwebengine_dictionaries 하위 디렉터리와 Qt 프레임워크 번들 내에 있는 Resources
디렉터리를 찾습니다.
요약하자면, Hunspell을 사용하는 경우 다음 경로가 고려됩니다:
QTWEBENGINE_DICTIONARIES_PATH
설정된 경우- QCoreApplication::applicationDirPath()/qtwebengine_dictionaries 또는 QCoreApplication::applicationDirPath()/../Contents/Resources/qtwebengine_dictionaries(macOS의 경우)
- [QLibraryInfo::DataPath]/qtwebengine_dictionaries 또는 경로/to/QtWebEngineCore.framework/Resources/qtwebengine_dictionaries (macOS의 Qt 프레임워크 번들)
맞춤법 검사는 기본적으로 비활성화되어 있으며 위젯 기반 애플리케이션에서는 QWebEngineProfile::setSpellCheckEnabled() 메서드를, Qt Quick 애플리케이션에서는 WebEngineProfile.spellCheckEnabled 속성을 사용하여 프로필별로 활성화할 수 있습니다.
맞춤법 검사에 사용되는 현재 언어는 프로필별로 정의되며 QWebEngineProfile::setSpellCheckLanguages() 메서드 또는 WebEngineProfile.spellCheckLanguages 속성을 사용하여 설정할 수 있습니다.
이 기능은 맞춤법 검사기 예제를 빌드하고 실행하여 테스트할 수 있습니다.
Qt WebEngine webengine-spellchecker
configure 스위치를 사용하여 맞춤법 검사기 지원 없이도 컴파일할 수 있습니다.
qt-configure-module path\to\qtwebengine\sources -no-webengine-spellchecker
자세한 내용은 Qt 구성 옵션을 참조하십시오.
이 기능에 대한 지원은 Qt 5.8.0에 추가되었습니다.
Touch
Qt WebEngine 는 웹 페이지를 탐색하고 상호 작용할 수 있는 터치 장치를 지원합니다.
애플리케이션은 다음과 같은 방식으로 터치 이벤트의 사용을 금지할 수 있습니다:
- 명령줄에
--touch-events=disabled
플래그를 전달하면 JavaScript API에서 터치 이벤트 지원이 비활성화됩니다(ontouchstart
및 관련 핸들러가document.window
객체에 존재하지 않음을 의미). 터치 이벤트는 여전히 웹 페이지에 전달됩니다. - WebEngine 보기 포커스 프록시 객체에 QObject::installEventFilter 을 사용하여 이벤트 필터 객체를 설치하고 모든 터치 이벤트를 필터링합니다.
소스 보기
Qt WebEngine 는 웹 페이지의 HTML 소스 보기를 지원합니다.
이 기능은 사용자 지정 메뉴에서 사용하거나 사용자 지정 이벤트에 할당할 수 있습니다. 자세한 내용은 WebEngineView::WebAction 및 QWebEnginePage::WebAction 을 참조하세요.
이 기능은 심플 브라우저 또는 나노 브라우저에서 웹 페이지를 연 다음 컨텍스트 메뉴에서 Page Source
을 선택하여 테스트할 수 있습니다. Page Source
컨텍스트 메뉴 항목은 새 탭에서 소스 보기를 엽니다.
현재 탭에서 소스 보기를 여는 경우 보기-소스 URI 체계의 URL도 지원됩니다. 예를 들어 URL 표시줄에 다음 URL을 입력하면 qt.io 웹 페이지의 HTML 소스를 볼 수 있습니다:
view-source:https://www.qt.io/
보기 소스 URI 체계를 가진 불완전한 URL의 자동 완성 기능을 사용하면 이 기능을 더욱 편리하게 사용할 수 있습니다. 예를 들어, 다음 불완전한 URL은 qt.io 웹 페이지의 소스 보기도 로드합니다:
view-source:qt.io
이 기능에 대한 지원은 Qt 5.8.0에 추가되었습니다.
웹 알림
Qt WebEngine 는 자바스크립트 웹 알림 API를 지원합니다. 응용 프로그램에서 QWebEnginePage::Notifications 또는 WebEngineView.Notifications 를 사용하여 이 기능을 명시적으로 허용해야 합니다.
이 기능에 대한 지원은 Qt 5.13.0에 추가되었습니다.
WebGL
Qt WebEngine 은 일부 그래픽 스택 설정에 대해 WebGL을 지원합니다. 사용자는 QtWebEngine 기반 애플리케이션을 사용하여 chrome://gpu 페이지를 방문할 수 있습니다. 그래픽 기능 상태 개요에는 현재 플랫폼 설정에서 WebGL이 지원되는지 여부가 표시됩니다. 사용자는 WebGL 보고서도 확인할 수 있습니다.
WebGL 지원은 기본적으로 활성화되어 있습니다. QWebEngineSettings::WebGLEnabled 설정을 사용하여 비활성화할 수 있습니다.
WebRTC
WebRTC는 간단한 API를 통해 브라우저에 실시간 통신(RTC) 기능을 제공합니다. 자세한 내용은 WebEngineView.Feature, 및 QWebEnginePage::Feature를 참조하세요.
이 기능은 웹캠 또는 마이크를 설정한 다음 Simple Browser 또는 Nano Browser에서 https://test.webrtc.org/
을 열어 테스트할 수 있습니다.
© 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.