このページでは

AndroidでQt Quick を使用してスプラッシュスクリーンを実装する

AndroidでQt Quick Viewを使用してスプラッシュスクリーンを設定する方法を紹介します。

緑色の背景にQt Developmentのロゴが入ったAndroidの起動画面

この簡単な例では、QmlビューをQtのスプラッシュスクリーンとして使用する方法を示します。追加の遷移効果は使用していません。この例では、Android 12で導入されたデフォルトのスプラッシュスクリーンを非表示にしています。アプリケーションの起動時、スプラッシュスクリーンが2秒間表示され、その後、遷移なしでメインビューが表示されます。

この例は、スプラッシュスクリーンを示す2つの類似した例の一連のうちの1つです。この例ではQMLビューを使用していますが、もう一方の例ではAndroidManifestのフラグを使用しています。

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 viewをmodalに設定します。
  • flags: Qt.SplashScreen タイトルバーを非表示にします。
  • property int timeoutInterval: 2000 ビューの表示時間を設定します。
メインビューの読み込み
    Loader {
        id: mainLoader
        source: "Main.qml"

タイマーは、タイムアウト時に exit 関数を呼び出し、スプラッシュスクリーンからメインビューに切り替えます。ここで、必要に応じてアウトアニメーションが開始されます。

    function exit() {
        mainLoader.item.show();
        splash.visible = false
        splash.timeout()
    }

タイマーは、スプラッシュ画面が表示されるのに適切な時間を確保します。これは、Loader.loaded()シグナルや、アプリが表示可能になった際にアプリの実装から発信される別のシグナルと組み合わせて使用することができます。

    Timer {
        interval: splash.timeoutInterval;
        running: splash.visible;
        repeat: false
        onTriggered: {
            splash.exit()
        }
    }

起動時、アプリケーションの最初のビューが表示される前に、デフォルトのスプラッシュスクリーンが表示されます。 変更方法については、「Androidのスプラッシュスクリーン」を参照してください。
デフォルトでは、Androidはアプリケーションのアイコンをスプラッシュスクリーンとして使用します。Qt for Androidアプリケーションでは、これをアプリのスプラッシュスクリーンとして使用するように変更したり、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のビューが下層のビューから向きを取得するためです。通常、下層のビューはアプリケーションドロワーであり、その向きは変更されません。 また、Activityビューが設定された後はテーマを変更できないため、アプリケーションが特定の向きに固定されてしまいます。
この問題を回避するには、Androidのスプラッシュ画面用に半透明のテーマを適用した一時的なActivityを作成します。そして、できるだけ早く、アプリケーションに必要なすべての機能を備えた別のActivityを起動します。

        <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>

これにより、Androidのネイティブスプラッシュ画面は表示されず、QMLで定義されたスプラッシュ画面を表示するQtActivityが起動されます。QMLのスプラッシュ画面を起動するには、AndroidのActivityのonCreate メソッドをオーバーライドし、Intentを使用してQtActivityを起動する必要があります。

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のスプラッシュ画面からメインビューが開かれます。この例では、メインビューには閉じるボタン付きのViewが1つだけ含まれています。

サンプルプロジェクト @ code.qt.io

© 2026 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.