【保存版】Qt Widgetsのスプラッシュスクリーンメッセージ操作のすべて!QSplashScreen::message()の使い方から代替方法まで


このメソッドは、const QString& 型の値を返します。返される値は、スプラッシュスクリーンに現在表示されているメッセージを表す文字列です。メッセージが存在しない場合は、空文字列が返されます。

メソッドの構文

const QString QSplashScreen::message() const;
QSplashScreen splash(QPixmap("splashscreen.png"));
splash.show();

// スプラッシュスクリーンにメッセージを表示
splash.showMessage("アプリケーションを起動しています...");

// メッセージを取得
QString message = splash.message();
std::cout << "メッセージ: " << message.toStdString() << std::endl;
  • QSplashScreen::messageChanged(const QString&) シグナルは、スプラッシュスクリーンに表示されているメッセージが変更されたときにemitされます。
  • QSplashScreen::clearMessage() メソッドを使用して、スプラッシュスクリーンに表示されているメッセージを消去することができます。
  • QSplashScreen::showMessage() メソッドを使用して、スプラッシュスクリーンにメッセージを表示することができます。
  • QSplashScreen クラスは、アプリケーションの起動時にのみ使用されます。アプリケーションが完全に起動したら、QSplashScreen オブジェクトを破棄する必要があります。


#include <QApplication>
#include <QSplashScreen>
#include <QPixmap>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  // スプラッシュスクリーンを作成
  QSplashScreen splash(QPixmap("splashscreen.png"));

  // スプラッシュスクリーンを表示
  splash.show();

  // 進捗バーを作成
  QProgressBar progressBar(&splash);
  progressBar.setGeometry(0, splash.height() - 30, splash.width(), 20);

  // アプリケーションの初期化
  for (int i = 0; i < 100; ++i) {
    // シミュレートされた初期化処理
    QThread::sleep(10);
    progressBar.setValue(i);

    // スプラッシュスクリーンにメッセージを表示
    splash.showMessage(QString("アプリケーションを初期化しています... %1%").arg(i));
  }

  // スプラッシュスクリーンを非表示にする
  splash.hide();

  // メインウィンドウを作成して表示
  MainWindow mainWindow;
  mainWindow.show();

  return app.exec();
}

このコードの説明

  1. QApplication オブジェクトを作成します。
  2. QSplashScreen オブジェクトを作成し、splashscreen.png 画像をスプラッシュスクリーンの背景として設定します。
  3. splash.show() を呼び出して、スプラッシュスクリーンを表示します。
  4. QProgressBar オブジェクトを作成し、スプラッシュスクリーンの下部に配置します。
  5. アプリケーションの初期化をシミュレートするために、ループを実行します。
  6. ループ内で、以下の処理を行います。
    • QThread::sleep(10) を呼び出して、10ミリ秒スリープします。
    • progressBar.setValue(i) を呼び出して、進捗バーの値を更新します。
    • splash.showMessage(QString("アプリケーションを初期化しています... %1%").arg(i)) を呼び出して、スプラッシュスクリーンにメッセージを表示します。
  7. ループが終了したら、splash.hide() を呼び出して、スプラッシュスクリーンを非表示にします。
  8. MainWindow オブジェクトを作成し、show() を呼び出して表示します。
  9. app.exec() を呼び出して、アプリケーションを実行します。

  • splashscreen.png 画像は、実際に存在するファイルである必要があります。
  • このコードは、Qt Widgets 6.x を使用してコンパイルする必要があります。

以下のコードは、QSplashScreen::message() メソッドを使用して、スプラッシュスクリーンに HTML 形式のメッセージを表示する方法を示しています。

splash.showMessage(QString("<html><head><title>アプリケーションを初期化しています...</title></head>"
                        "<body><p>アプリケーションを初期化しています... %1%</p></body></html>").arg(i));


以下に、QSplashScreen::message() の代替方法として考えられるいくつかの方法を紹介します。

カスタムラベルを使用する

スプラッシュスクリーンに表示するメッセージをカスタマイズしたい場合は、QSplashScreen クラスの代わりにカスタムラベルを使用することができます。カスタムラベルを使用すれば、メッセージのフォント、サイズ、色などを自由に設定することができます。

QLabel label(splash);
label.setText("アプリケーションを初期化しています...");
label.setGeometry(0, splash.height() - 30, splash.width(), 20);

プログレスバーを使用する

アプリケーションの読み込み状況を視覚的に表示したい場合は、プログレスバーを使用することができます。プログレスバーを使用すれば、読み込み状況をパーセンテージで表示することができます。

QProgressBar progressBar(&splash);
progressBar.setGeometry(0, splash.height() - 30, splash.width(), 20);

ステータスバーを使用する

QStatusBar statusBar(&mainWindow);
statusBar->showMessage("アプリケーションを初期化しています...");

ツールチップを使用する

メッセージをツールチップとして表示したい場合は、ツールチップを使用することができます。ツールチップを使用すれば、ユーザーがマウスカーソルをメッセージの上に置いたときにのみメッセージが表示されます。

label.setToolTip("アプリケーションを初期化しています...");
  • メッセージをツールチップとして表示したい場合は、ツールチップを使用します。
  • アプリケーションのステータス情報を表示したい場合は、ステータスバーを使用します。
  • 読み込み状況を視覚的に表示したい場合は、プログレスバーを使用します。
  • メッセージをカスタマイズしたい場合は、カスタムラベルを使用します。