Android에서 Qt Quick 로 스플래시 화면 구현하기
안드로이드에서 Qt Quick 보기로 시작 화면을 설정하는 방법을 보여드립니다.
이 간단한 예제는 QML 뷰를 Qt 시작 화면으로 사용하는 방법을 보여줍니다. 추가 전환은 사용되지 않습니다. 이 예제에서는 안드로이드 12에 도입된 기본 스플래시 화면이 숨겨져 있습니다. 애플리케이션이 시작되면 2초 동안 스플래시 화면이 표시되고 그 이후에는 전환 없이 메인 보기가 표시됩니다.
이 예제는 스플래시 화면을 보여주는 두 가지 유사한 예제 시리즈 중 하나입니다. 이 예제는 QML 보기를 사용하고 다른 예제는 안드로이드 매니페스트 플래그를 사용합니다.
Android에서 Qt Quick 스플래시 화면 사용
QML 보기를 스플래시 화면으로 사용하려면 보기를 정의하고 스플래시 화면 기능에 특정한 몇 가지 항목을 추가합니다.
Window { id: splash color: "#2CDE85" title: qsTr("Splash Window") modality: Qt.ApplicationModal flags: Qt.SplashScreen visible: true property int timeoutInterval: 2000 signal timeout
modality: Qt.ApplicationModal
뷰 모달을 설정합니다.flags: Qt.SplashScreen
제목 표시줄을 숨깁니다.property int timeoutInterval: 2000
보기의 표시 시간을 설정합니다.
기본 보기 로드
Loader { id: mainLoader source: "Main.qml"
타이머는 시간 초과 시 종료 함수를 호출하여 스플래시 화면에서 기본 보기로 전환합니다. 가능한 모든 아웃 애니메이션이 여기에서 시작됩니다.
function exit() { mainLoader.item.show(); splash.visible = false splash.timeout() }
타이머는 스플래시 화면이 표시될 때까지 적절한 시간을 허용합니다. 이 타이머는 Loader::onLoaded() 신호와 함께 사용하거나 앱이 표시될 준비가 되었을 때 앱 구현에서 발생하는 다른 신호와 함께 사용할 수 있습니다.
Timer { interval: splash.timeoutInterval; running: splash.visible; repeat: false onTriggered: { splash.exit() } }
실행 시 애플리케이션의 첫 번째 보기가 표시되기 전에 기본 스플래시 화면이 표시됩니다. 수정에 대한 지침은 Android 스플래시 화면을 참조하세요.
기본적으로 Android는 애플리케이션 아이콘을 스플래시 화면으로 사용합니다. Android용 Qt 애플리케이션에서는 이 아이콘을 앱 시작 화면으로 사용하도록 수정하거나 Qt 시작 화면과 결합할 수 있습니다.
기본 Android 시작 화면 숨기기
플랫폼 간에 시작 사용자 경험을 일관되게 유지하려면 Android 시작 화면을 숨겨야 할 수 있습니다. 이렇게 하려면 Android 시작 화면을 효과적으로 숨기는 반투명 테마를 정의하면 됩니다.
<?xml version="1.0" encoding="UTF-8"?> <resources> <style name="splashStartTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowDisablePreview">true</item> <item name="android:windowIsTranslucent">true</item> </style> </resources>
하지만 문제가 있습니다. 반투명 테마를 사용하면 방향 변경이 작동하지 않습니다. 이는 Android 보기가 기본 보기에서 방향을 가져오기 때문에 발생하며, 일반적으로 방향을 변경하지 않는 애플리케이션 서랍입니다. 그리고 활동 보기가 설정된 후에는 테마를 변경할 수 없기 때문에 결국 애플리케이션이 한 방향으로 고정됩니다.
해결 방법으로 Android 스플래시 화면에 반투명 테마를 사용하여 버려지는 활동을 만들 수 있습니다. 가능한 한 빨리 애플리케이션에 필요한 모든 기능을 갖춘 다른 액티비티를 시작합니다.
<activity android:name=".SplashActivity" android:exported="true" android:label="QML Splash Screen Example" android:theme="@style/splashStartTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
이제 기본 안드로이드 스플래시 화면이 표시되지 않고 QML에 정의된 스플래시 화면을 표시하는 QtActivity를 시작합니다. QML 시작 화면을 실행하려면 안드로이드 액티비티의 onCreate
메서드를 재정의하고 인텐트를 사용하여 QtActivity를 실행해야 합니다.
// Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause package io.qt.qmlsplashscreeninandroid; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.util.Log; import android.content.Intent; import android.view.ViewTreeObserver; import org.qtproject.qt.android.bindings.QtActivity; public class SplashActivity extends Activity { private static final String TAG = "SplashActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set up an OnPreDrawListener to the root view. final View content = findViewById(android.R.id.content); content.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { Intent i = new Intent(SplashActivity.this, QtActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i); content.getViewTreeObserver().removeOnPreDrawListener(this); finish(); return true; } }); } }
마지막으로, QML 스플래시 화면은 메인 뷰를 열며, 이 예제에서는 닫기 버튼이 있는 단일 뷰만 포함되어 있습니다.
© 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.