このページでは

QCoreApplication Class

QCoreApplication クラスは、UI を持たない Qt アプリケーション向けのイベントループを提供します。詳細...

ヘッダー: #include <QCoreApplication>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承元: QObject
継承元:

QAndroidService およびQGuiApplication

プロパティ

パブリック関数

QCoreApplication(int &argc, char **argv)
virtual ~QCoreApplication()
(since 6.5) Qt::PermissionStatus checkPermission(const QPermission &permission)
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
virtual bool notify(QObject *receiver, QEvent *event)
void removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
(since 6.5) void requestPermission(const QPermission &permission, Functor &&functor)
(since 6.5) void requestPermission(const QPermission &permission, const QObject *context, Functor functor)

パブリックスロット

void exit(int returnCode = 0)
void quit()

シグナル

void aboutToQuit()

静的パブリックメンバ

void addLibraryPath(const QString &path)
QString applicationDirPath()
QString applicationFilePath()
QString applicationName()
qint64 applicationPid()
QString applicationVersion()
QStringList arguments()
bool closingDown()
QAbstractEventDispatcher *eventDispatcher()
int exec()
bool installTranslator(QTranslator *translationFile)
QCoreApplication *instance()
bool isQuitLockEnabled()
bool isSetuidAllowed()
QStringList libraryPaths()
QString organizationDomain()
QString organizationName()
void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
(since 6.7) void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
void processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
void removeLibraryPath(const QString &path)
void removePostedEvents(QObject *receiver, int eventType = 0)
bool removeTranslator(QTranslator *translationFile)
bool sendEvent(QObject *receiver, QEvent *event)
void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
void setApplicationName(const QString &application)
void setApplicationVersion(const QString &version)
void setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
void setLibraryPaths(const QStringList &paths)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
void setQuitLockEnabled(bool enabled)
void setSetuidAllowed(bool allow)
bool startingUp()
bool testAttribute(Qt::ApplicationAttribute attribute)
QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

再実装された保護関数

virtual bool event(QEvent *e) override
void qAddPostRoutine(QtCleanUpFunction ptr)
void qRemovePostRoutine(QtCleanUpFunction ptr)

マクロ

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)
Q_DECLARE_TR_FUNCTIONS(context)

詳細な説明

このクラスは、非GUIアプリケーションがイベントループを実現するために使用されます。Qtを使用する非GUIアプリケーションでは、QCoreApplicationオブジェクトは正確に1つ存在する必要があります。GUIアプリケーションについては、QGuiApplication を参照してください。Qt Widgets モジュールを使用するアプリケーションについては、QApplication を参照してください。

QCoreApplication にはメインのイベントループが含まれており、そこでオペレーティングシステム(タイマーやネットワークイベントなど)やその他のソースからのすべてのイベントが処理され、ディスパッチされます。また、アプリケーションの初期化と終了処理、およびシステム全体やアプリケーション全体の設定も処理します。

イベントループとイベント処理

イベントループは、exec() の呼び出しによって開始されます。長時間実行される操作では、processEvents() を呼び出すことで、アプリケーションの応答性を維持できます。

一般に、main() 関数内で、QCoreApplication、QGuiApplication 、またはQApplication オブジェクトをできるだけ早い段階で作成することを推奨します。exec()は、イベントループが終了する(例えば、quit()が呼び出される)まで戻りません。

また、いくつかの静的な便利関数も提供されています。QCoreApplicationオブジェクトは、instance() から利用可能です。イベントは、sendEvent() で送信するか、postEvent() を使用してイベントキューに投稿することができます。保留中のイベントは、removePostedEvents() で削除するか、sendPostedEvents() でディスパッチすることができます。

このクラスは、quit() スロットとaboutToQuit() シグナルを提供します。

アプリケーションおよびライブラリのパス

アプリケーションには、applicationDirPath() およびapplicationFilePath() があります。ライブラリパス (QLibrary を参照) は、libraryPaths() で取得でき、setLibraryPaths()、addLibraryPath()、およびremoveLibraryPath() によって操作できます。

国際化と翻訳

翻訳ファイルは、installTranslator() およびremoveTranslator() を使用して追加または削除できます。アプリケーションの文字列は、translate() を使用して翻訳できます。QObject::tr() 関数は、translate() を用いて実装されています。

コマンドライン引数へのアクセス

QCoreApplicationのコンストラクタに渡されるコマンドライン引数には、arguments()関数を使用してアクセスする必要があります。

注:QCoreApplicationは オプション-qmljsdebugger="..." を削除します。これはqmljsdebugger の引数を解析し、その後、このオプションとその引数を削除します。

より高度なコマンドラインオプションの処理を行うには、QCommandLineParser を作成してください。

ロケール設定

Unix/Linux では、Qt はデフォルトでシステムのロケール設定を使用するように構成されています。これにより、POSIX 関数を使用する際、たとえば float や文字列などのデータ型間の変換を行う際に、ロケールによって表記が異なる場合があるため、競合が生じる可能性があります。 この問題を回避するには、QApplication 、QGuiApplication 、または QCoreApplication を初期化した直後に POSIX 関数setlocale(LC_NUMERIC,"C") を呼び出し、数値の書式設定に使用されるロケールを「C」ロケールにリセットします。

QGuiApplication 、QAbstractEventDispatcher 、QEventLoop 、セマフォを使用したプロデューサーとコンシューマー、および待機条件を使用したプロデューサーとコンシューマーも参照してください 。

プロパティのドキュメント

applicationName : QString

このプロパティには、このアプリケーションの名前が格納されます

アプリケーション名は、さまざまな Qt クラスやモジュールで使用されます。特に顕著なのは、QSettings がデフォルトコンストラクタを使用して生成される場合です。その他の使用例としては、フォーマットされたログ出力(qSetMessagePattern() を参照)、QCommandLineParser による出力、QTemporaryDir およびQTemporaryFile のデフォルトパス、ならびにQStandardPaths の一部のファイルの場所などが挙げられます。 Qt D-Bus、アクセシビリティ、および XCB プラットフォームの統合でも、アプリケーション名が使用されます。

設定されていない場合、アプリケーション名はデフォルトで実行ファイル名になります。

アクセス機能:

QString applicationName()
void setApplicationName(const QString &application)

organizationName 、organizationDomain 、applicationVersion 、およびapplicationFilePath()も参照してください 。

applicationVersion : QString

このプロパティには、このアプリケーションのバージョンが格納されます

設定されていない場合、アプリケーションのバージョンは、メインのアプリケーション実行ファイルまたはパッケージから決定されるプラットフォーム固有の値がデフォルトとして使用されます(Qt 5.9以降):

プラットフォームソース
Windows(従来のデスクトップ)VERSIONINFOリソースのPRODUCTVERSIONパラメータ
macOS、iOS、tvOS、watchOS情報プロパティリストの CFBundleVersion プロパティ
AndroidAndroidManifest.xml マニフェスト要素の android:versionName プロパティ
HarmonyOSapp.json5 設定ファイルの versionName フィールド

その他のプラットフォームでは、デフォルトは空の文字列です。

アクセス関数:

QString applicationVersion()
void setApplicationVersion(const QString &version)

関連項目: applicationName 、organizationName 、およびorganizationDomain 。

organizationDomain : QString

このプロパティには、このアプリケーションを作成した組織のインターネットドメインが格納されます

この値は、QSettings クラスがデフォルトコンストラクタを使用してインスタンス化される際に使用されます。これにより、QSettings オブジェクトが作成されるたびにこの情報を繰り返し指定する手間が省けます。

Macでは、QSettings は、organizationDomain()が空の文字列でない場合、それを組織名として使用します。そうでない場合は、organizationName()を使用します。その他のすべてのプラットフォームでは、QSettings はorganizationName()を組織名として使用します。

アクセス関数:

QString organizationDomain()
void setOrganizationDomain(const QString &orgDomain)

関連項目: organizationName 、applicationName 、およびapplicationVersion 。

organizationName : QString

このプロパティには、このアプリケーションを作成した組織の名前が格納されます

この値は、QSettings クラスがデフォルトコンストラクタを使用してインスタンス化される際に使用されます。これにより、QSettings オブジェクトが作成されるたびにこの情報を繰り返し指定する必要がなくなります。

Macでは、QSettings は、organizationDomain()が空の文字列でない場合、それを組織名として使用します。それ以外の場合は、organizationName()を使用します。その他のすべてのプラットフォームでは、QSettings はorganizationName()を組織名として使用します。

アクセス関数:

QString organizationName()
void setOrganizationName(const QString &orgName)

organizationDomain およびapplicationNameも参照してください 。

quitLockEnabled : bool

このプロパティは、QEventLoopLocker 機能の使用によってアプリケーションが終了する可能性があるかどうかを示します。

このプロパティが `true ` に設定されている場合、アプリケーションに対して実行中の最後の `QEventLoopLocker ` が解放されると、アプリケーションの終了が試みられます。

なお、たとえば、開いているウィンドウが残っている場合や、QEvent::Quit イベントが無視された場合など、終了を試みたからといって必ずしもアプリケーションが終了するとは限りません。

デフォルトは「true 」です。

アクセス関数:

bool isQuitLockEnabled()
void setQuitLockEnabled(bool enabled)

「QEventLoopLocker」も参照してください 。

メンバ関数のドキュメント

QCoreApplication::QCoreApplication(int &argc, char **argv)

Qt Coreアプリケーションを構築します。Qt Coreアプリケーションとは、グラフィカルユーザーインターフェースを持たないアプリケーションのことです。このようなアプリケーションは、コンソール上で、あるいはサーバープロセスとして使用されます。

argc およびargv の引数はアプリケーションによって処理され、arguments() 関数によってより利用しやすい形式で提供されます。

警告: `argc ` および `argv ` が参照するデータは 、`QCoreApplication` オブジェクトの存続期間全体を通じて有効なままである必要があります。さらに、`argc ` は 0 より大きく、`argv ` には少なくとも 1 つの有効な文字列が含まれている必要があります。

[virtual noexcept] QCoreApplication::~QCoreApplication()

QCoreApplication オブジェクトを破棄します。

[private signal] void QCoreApplication::aboutToQuit()

このシグナルは、アプリケーションがメインイベントループを終了しようとしているとき、たとえばイベントループレベルがゼロになったときに発せられます。これは、アプリケーション内部から `quit()` が呼び出された後、あるいはユーザーがデスクトップセッション全体をシャットダウンしたときに発生する可能性があります。

このシグナルは、アプリケーションが終了直前にクリーンアップ処理を行う必要がある場合に特に有用です。なお、この状態ではユーザー操作は一切行えないことに注意してください。

注:この時点では メインイベントループは依然として実行中ですが、戻り値が返された後は、deleteLater() によって削除されたオブジェクトに対するQEvent::DeferredDelete イベントを除き、それ以上のイベントは処理されません。イベント処理が必要な場合は、ネストされたイベントループを使用するか、QCoreApplication::processEvents() を手動で呼び出してください。

注:これは プライベートシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。

quit()も参照してください 。

[static] void QCoreApplication::addLibraryPath(const QString &path)

ライブラリパスリストの先頭に「path 」を追加し、ライブラリ検索時にこのパスが最初に検索されるようにします。path が空の場合、またはすでにパスリストに含まれている場合は、パスリストは変更されません。

デフォルトのパスリストは 1 つまたは 2 つのエントリで構成されます。1 つ目はプラグインのインストールディレクトリであり、これはINSTALL/plugins です。ここで、INSTALL は Qt がインストールされたディレクトリです。2 つ目はアプリケーション自身のディレクトリ(現在のディレクトリではありません)ですが、これはQCoreApplication オブジェクトがインスタンス化された後にのみ有効になります。

QCoreApplication のインスタンスが破棄されると、ライブラリパスはデフォルト値にリセットされます。

警告: QLibrary は 現在、指定されたパスを使用して非絶対ライブラリパスを検索しません。

関連項目: removeLibraryPath()、libraryPaths()、およびsetLibraryPaths()。

[static] QString QCoreApplication::applicationDirPath()

アプリケーションの実行ファイルが含まれているディレクトリを返します。

たとえば、QtをC:\Qt ディレクトリにインストールし、「regexp 」サンプルを実行した場合、この関数は「C:/Qt/examples/tools/regexp」を返します。

macOS および iOS では、これは実際に実行ファイルが含まれているディレクトリを指します。このディレクトリは、アプリケーションがバンドルされている場合は、アプリケーションバンドル内にある場合もあります。

Android では、これは実際に実行ファイルが含まれているディレクトリを指しますが、そのディレクトリはアプリケーションの APK 内にある場合もあります(非圧縮ライブラリのサポートでビルドされている場合)。

警告: Linuxでは 、この関数は `/proc ` ファイルシステムからパスを取得しようとします。それが失敗した場合、argv[0] に実行ファイルの絶対ファイル名が含まれているものとみなします。また、この関数は、現在のディレクトリがアプリケーションによって変更されていないことも前提としています。

applicationFilePath()も参照してください 。

[static] QString QCoreApplication::applicationFilePath()

アプリケーションの実行ファイルのファイルパスを返します。

たとえば、Qtを/usr/local/qt ディレクトリにインストールし、regexp サンプルを実行した場合、この関数は「/usr/local/qt/examples/tools/regexp/regexp」を返します。

警告: Linuxでは 、この関数は/proc ファイルシステムからパスを取得しようとします。それが失敗した場合、argv[0] には実行ファイルの絶対ファイル名が含まれているものとみなされます。また、この関数は、アプリケーションによって現在のディレクトリが変更されていないことも前提としています。

applicationDirPath()も参照してください 。

[static noexcept] qint64 QCoreApplication::applicationPid()

アプリケーションの現在のプロセスIDを返します。

[static] QStringList QCoreApplication::arguments()

コマンドライン引数のリストを返します。

通常、arguments().at(0) はプログラム名、arguments().at(1) は最初の引数、arguments().last() は最後の引数となります。Windows に関する以下の注記を参照してください。

この関数の呼び出しには時間がかかるため、コマンドラインを解析する際は結果を変数に格納しておくことを推奨します。

警告: Unixでは 、このリストは main() 関数内のコンストラクタに渡される argc および argv パラメータから構築されます。 argv 内の文字列データは、QString::fromLocal8Bit() を使用して解釈されるため、たとえば、Latin1 ロケールで動作するシステムでは、日本語のコマンドライン引数を渡すことはできません。最近の Unix システムの多くは Unicode ベースであるため、この制限はありません。

Windows では、変更された argv/argc パラメータがコンストラクタに渡された場合にのみ、argc および argv パラメータからリストが構築されます。その場合、エンコーディングの問題が発生する可能性があります。

それ以外の場合は、arguments() はGetCommandLine() の戻り値から構築されます。この結果、arguments().at(0) で得られる文字列は、Windows 上でアプリケーションを起動するために使用された正確なプログラム名とは異なる場合があります。

applicationFilePath() およびQCommandLineParserも参照してください 。

[since 6.5] Qt::PermissionStatus QCoreApplication::checkPermission(const QPermission &permission)

指定されたステータスを確認しますpermission

結果がQt::PermissionStatus::Undetermined の場合、ユーザーの意図を確認するためにrequestPermission()を介して許可をリクエストする必要があります。

この関数は Qt 6.5 で導入されました。

requestPermission() および「アプリケーションの権限」も参照してください 。

[static] bool QCoreApplication::closingDown()

アプリケーションオブジェクトが破棄されている場合は `true ` を返し、そうでない場合は `false` を返します。

startingUp()も参照してください 。

[override virtual protected] bool QCoreApplication::event(QEvent *e)

QObject::event(QEvent *e) の再実装です。

[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()

メインスレッドのイベントディスパッチャオブジェクトへのポインタを返します。そのスレッドにイベントディスパッチャが存在しない場合、この関数は `nullptr` を返します。

setEventDispatcher()も参照してください 。

[static] int QCoreApplication::exec()

メインイベントループに入り、exit() が呼び出されるまで待機します。exit() に渡された値を返します(quit() を通じてexit() が呼び出された場合は、この値は 0 になります)。

イベント処理を開始するには、この関数を呼び出す必要があります。メインイベントループはウィンドウシステムからイベントを受け取り、それらをアプリケーションのウィジェットにディスパッチします。

アプリケーションにアイドル処理(保留中のイベントがないときに特別な関数を実行する)を行わせるには、タイムアウトを 0ns に設定した `QChronoTimer ` を使用します。より高度なアイドル処理の仕組みは、`processEvents()` を使用して実現できます。

一部のプラットフォームでは exec() の呼び出しが戻らない可能性があるため、アプリケーションのmain() 関数内にクリーンアップコードを記述するのではなく、aboutToQuit() シグナルに接続することを推奨します。 たとえば、Windows では、ユーザーがログオフすると、Qt がすべてのトップレベルウィンドウを閉じた後にシステムがプロセスを終了させます。したがって、exec() の呼び出し後に、アプリケーションがイベントループを終了し、main() 関数の末尾にあるコードを実行する時間があるとは保証されません。

quit()、exit()、processEvents()、およびQApplication::exec()も参照してください 。

[static slot] void QCoreApplication::exit(int returnCode = 0)

アプリケーションに、戻りコードを指定して終了するよう指示します。

この関数が呼び出されると、アプリケーションはメインイベントループを離れ、exec()の呼び出しから戻ります。exec()関数はreturnCode を返します。イベントループが実行されていない場合、この関数は何も行いません。

慣例により、returnCode が0の場合は成功を意味し、0以外の値はエラーを示します。

QueuedConnection を使用して、常にシグナルをこのスロットに接続することをお勧めします。制御がメインイベントループに入る前(たとえば、「int main」がexec() を呼び出す前など)に、このスロットに接続された(キューに入れられていない)シグナルが発行された場合、スロットは効果を発揮せず、アプリケーションは終了しません。 キュー化された接続を使用することで、制御がメインイベントループに入るまではスロットが呼び出されないことが保証されます。

なお、同名の C ライブラリ関数とは異なり、この関数は呼び出し元に制御を戻します。停止するのはイベント処理の方です。

また、この関数はスレッドセーフではない点にも注意してください。この関数は、メインスレッド(QCoreApplication オブジェクトがイベントを処理しているスレッド)からのみ呼び出す必要があります。別のスレッドからアプリケーションの終了を要求するには、QCoreApplication::quit() を使用するか、代わりにメインスレッドから QMetaMethod::invokeMethod() を使用してこの関数を呼び出してください。

quit() およびexec()も参照してください 。

void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

メインスレッドでアプリケーションが受信するすべてのネイティブイベントに対して、イベントフィルター `filterObj ` を登録します。

イベントフィルタ `filterObj ` は、メインスレッドで受信されたすべてのネイティブイベントに対して呼び出される `nativeEventFilter()` 関数を通じてイベントを受け取ります。

QAbstractNativeEventFilter::nativeEventFilter() 関数は、イベントをフィルタリング(つまり停止)する必要がある場合は true を返す必要があります。通常の Qt 処理を継続させる場合は false を返す必要があります。そうすることで、ネイティブイベントはQEvent に変換され、標準の Qtevent フィルタリング(例:QObject::installEventFilter())によって処理されるようになります。

複数のイベントフィルタが設定されている場合、最後に設定されたフィルタが最初に有効になります。

注: ここで設定されるフィルタ関数は 、ネイティブメッセージ、つまり MSG または XCB イベント構造体を受け取ります。

注: Qt::AA_PluginApplication 属性が設定されている場合、アプリケーションではネイティブ イベントフィルタは無効になります。

移植性を最大限に高めるためには、可能な限り常に `QEvent ` および `QObject::installEventFilter()` を使用するようにしてください。

QObject::installEventFilter()も参照してください 。

[static] bool QCoreApplication::installTranslator(QTranslator *translationFile)

翻訳ファイル「translationFile 」を、翻訳に使用する翻訳ファイルのリストに追加します。

複数の翻訳ファイルをインストールすることができます。翻訳の検索は、インストールされた順序の逆順で行われるため、最後にインストールされた翻訳ファイルが最初に検索され、最初にインストールされた翻訳ファイルが最後に検索されます。一致する文字列を含む翻訳が見つかり次第、検索は停止します。

QTranslator のインストールや削除、あるいはインストール済みのQTranslator の変更を行うと、QCoreApplication インスタンスに対してLanguageChange イベントが発生します。QApplication インスタンスは、このイベントをすべてのトップレベルウィジェットに伝播します。そこで、changeEvent を再実装することで、tr() 関数を通じてユーザーに表示される文字列をそれぞれのプロパティセッターに渡すことにより、ユーザーインターフェースの再翻訳を行うことができます。Qt Widgets Designer によって生成されたユーザーインターフェースクラスには、呼び出すことができるretranslateUi() 関数が用意されています。

この関数は、成功した場合は `true ` を、失敗した場合は `false ` を返します。

注: QCoreApplication は translationFile の所有権を取得しません。関数がtrue を返した場合、translationFile オブジェクトが、そのオブジェクトに対してremoveTranslator()が呼び出されるか、アプリケーションが終了するまで存続するように確保するのは、アプリケーションの責任です。

removeTranslator()、translate()、QTranslator::load()、および「動的言語の変更に備える」も参照してください 。

[static noexcept] QCoreApplication *QCoreApplication::instance()

アプリケーションのQCoreApplication (またはQGuiApplication /QApplication )インスタンスへのポインタを返します。

インスタンスが割り当てられていない場合は、nullptr が返されます。

データ競合に関する注意:呼び出し側のコードがC++20としてコンパイルされていない限り、この関数を補助スレッドからQCoreApplication インスタンスの存在を確認するために使用してはなりません。

[static] bool QCoreApplication::isSetuidAllowed()

UNIXプラットフォーム上で、アプリケーションがsetuidを実行できる場合、trueを返します。

QCoreApplication::setSetuidAllowed()も参照してください 。

[static] QStringList QCoreApplication::libraryPaths()

ライブラリを動的に読み込む際に、アプリケーションが検索するパスのリストを返します。

この関数の戻り値は、QCoreApplication が作成された際に変更される可能性があります。QCoreApplication を作成する前にこの関数を呼び出すことは推奨されません。アプリケーションの実行ファイルのディレクトリ(作業ディレクトリではありません)は、それが判明している場合、リストに含まれます。これを特定するには、QCoreApplication を構築する必要があります。これは、argv[0] を使用してそのディレクトリを検索するためです。

Qt はデフォルトのライブラリパスを提供していますが、qt.confファイルを使用して設定することも可能です。このファイルで指定されたパスは、デフォルト値よりも優先されます。 qt.conf ファイルがアプリケーションの実行ファイルと同じディレクトリにある場合、QCoreApplication が作成されるまでそのファイルが見つからない可能性があることに注意してください。この関数を呼び出した際にファイルが見つからない場合、デフォルトのライブラリパスが使用されます。

このリストには、プラグインが存在する場合、そのインストールディレクトリが含まれます(プラグインのデフォルトのインストールディレクトリはINSTALL/plugins です。ここで、INSTALL は Qt がインストールされたディレクトリです)。環境変数 `QT_PLUGIN_PATH ` のコロン区切りのエントリは常に追加されます。プラグインのインストールディレクトリ(およびその存在)は、アプリケーションの実行ファイルのディレクトリが判明した時点で変更される可能性があります。

警告:この関数は現在 、デフォルトのパスにQLibraryInfo::LibrariesPath を含んでおらず、QLibrary も現在、非絶対パスであるライブラリパスを検索するためにこの関数を使用していません。

関連項目: setLibraryPaths(),addLibraryPath(),removeLibraryPath(),QLibrary 、および「Qt プラグインの作成方法」。

[virtual] bool QCoreApplication::notify(QObject *receiver, QEvent *event)

event をreceiver に送信します:receiver->event(event)。受信側のイベントハンドラから返された値を返します。この関数は、どのスレッドのどのオブジェクトに送信されたイベントに対しても呼び出されることに注意してください。

特定の種類のイベント(例:マウスやキーイベント)については、レシーバーがそのイベントに関心を持たない場合(つまり、false を返す場合)、そのイベントはレシーバーの親オブジェクトへと伝播され、最上位オブジェクトに至るまで順次伝播されます。

イベントを処理する方法は5通りあり、この仮想関数を再実装するのはそのうちの1つにすぎません。5つのアプローチを以下に示します:

  1. paintEvent()、mousePressEvent() などを再実装する方法。これは最も一般的で、最も簡単ですが、機能面では最も制限があります。
  2. この関数を再実装する。これは非常に強力で、完全な制御が可能ですが、一度にアクティブにできるサブクラスは1つだけです。
  3. QCoreApplication::instance() にイベントフィルタを登録する。このようなイベントフィルタは、すべてのウィジェットのすべてのイベントを処理できるため、notify() を再実装するのと同じくらい強力です。さらに、アプリケーション全体で複数のイベントフィルタを設定することも可能です。 グローバルイベントフィルタは、disabled widgets に対するマウスイベントも検出します。なお、アプリケーションイベントフィルタは、メインスレッド上で実行されているオブジェクトに対してのみ呼び出される点に注意してください。
  4. QObject::event() を再実装する(QWidget がそうしているように)。これを行うと、Tab キーの押下イベントを取得でき、ウィジェット固有のイベントフィルタよりも先にそのイベントを確認できます。
  5. オブジェクトにイベントフィルタを登録します。このようなイベントフィルタは、フォーカスウィジェットを変更しない限り、TabキーやShift+Tabキーの押下イベントを含め、すべてのイベントを取得します。

今後の方向性:Qt 7 では、メインスレッド外で実行されるオブジェクトに対しては、この関数は呼び出されなくなります。この機能が必要なアプリケーションは、当面の間、イベントの検査に関するニーズに対して他の解決策を見つける必要があります。この変更はメインスレッドにも拡大される可能性があり、その結果、この関数は非推奨となる可能性があります。

警告:この関数をオーバーライドする場合 、アプリケーションオブジェクトの破棄が開始される前に、イベントを処理しているすべてのスレッドがその処理を停止するようにする必要があります。これには、使用している他のライブラリによって起動されたスレッドも含まれますが、Qt独自のスレッドには適用されません。

関連項目: QObject::event() およびinstallNativeEventFilter()。

[static] void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)

イベント `event` を、オブジェクト `receiver ` をイベントの受信者としてイベントキューに追加し、直ちに返却します。

イベントはヒープ上に割り当てられる必要があります。これは、イベントキューがイベントの所有権を取得し、投稿後にそれを削除するためです。イベントが投稿された後にそのイベントにアクセスすることは安全ではありません。

制御がメインイベントループに戻ると、キューに格納されているすべてのイベントがnotify() 関数を使用して送信されます。

イベントは、priority の値が降順でソートされます。つまり、priority の値が大きいイベントは、priority の値が小さいイベントよりも先にキューに入れられます。priority には、INT_MAXからINT_MINまでの任意の整数値(両端を含む)を指定できます。詳細については、Qt::EventPriority を参照してください。priority が等しいイベントは、投稿された順に処理されます。

注: QObject::deleteLater() は、オブジェクトの削除を遅延スケジュールします。これは通常、受信側のイベントループによって処理されます。スレッド内でイベントループが実行されていない場合、削除はスレッドが終了した時点で実行されます。一般的かつ安全なパターンとして、スレッドの finished() シグナルをオブジェクトのdeleteLater() スロットに接続する方法があります:

QObject::connect(thread, &QThread::finished, worker, &QObject::deleteLater);

注: この関数はスレッドセーフです。

関連項目: sendEvent()、notify()、sendPostedEvents()、およびQt::EventPriority 。

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)

指定されたflags に従って、呼び出し元スレッドの保留中のイベントの一部を処理します。

この関数の使用は推奨されません。代わりに、処理に時間がかかる操作をGUIスレッドから補助スレッドに移し、イベントループのネスト処理を完全に回避することを推奨します。イベント処理がどうしても必要な場合は、代わりにQEventLoop の使用を検討してください。

イベントループを使用せずに、この関数を継続的に呼び出すローカルループを実行している場合、DeferredDelete のイベントは処理されません。これにより、DeferredDelete イベントに依存して正常に機能するウィジェット(例:QToolTip )の動作に影響が出る可能性があります。代替手段として、そのローカルループ内からsendPostedEvents()を呼び出す方法があります。

この関数を呼び出すと、呼び出し元のスレッドに関するイベントのみが処理され、利用可能なすべてのイベントの処理が完了した後に戻り値が返されます。利用可能なイベントとは、関数の呼び出し前にキューに入れられたイベントのことです。つまり、関数の実行中に投稿されたイベントは、次回のイベント処理までキューに保留されます。

注: この関数はスレッドセーフです。

関連項目: exec()、QTimer 、QChronoTimer 、QEventLoop::processEvents()、およびsendPostedEvents()。

[static, since 6.7] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)

deadline の有効期限が切れるか、処理すべきイベントがなくなるまで、呼び出し元スレッドの保留中のイベントを処理します。いずれか早い方が適用されます。

この関数の使用は推奨されません。代わりに、長時間かかる処理をGUIスレッドから補助スレッドに移し、ネストされたイベントループ処理を完全に回避することを推奨します。どうしてもイベント処理が必要な場合は、代わりにQEventLoop の使用を検討してください。

この関数を呼び出すと、呼び出し元のスレッドのイベントのみが処理されます。

注: processEvents() のオーバーロードとは異なり 、この関数は関数の実行中に投稿されたイベントも処理します。

注: タイムアウト前にキューに入れられたイベントはすべて 、処理にどれだけの時間がかかっても処理されます。

これはオーバーロードされた関数です。

注: この関数はスレッドセーフです。

この関数は Qt 6.7 で導入されました。

exec()、QTimer 、QChronoTimer 、およびQEventLoop::processEvents()も参照してください 。

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)

呼び出し元スレッドの未処理イベントを、ms ミリ秒間、または処理すべきイベントがなくなるまで(いずれか短い方)処理します。

これは、次の呼び出しと同等です。

QCoreApplication::processEvents(flags, QDeadlineTimer(ms));

これはオーバーロードされた関数です。

[static slot] void QCoreApplication::quit()

アプリケーションに終了を要求します。

アプリケーションが終了を阻止している場合(例えば、ウィンドウの1つが閉じられない場合など)、この要求は無視されることがあります。アプリケーションは、アプリケーションレベルでQEvent::Quit イベントを処理するか、個々のウィンドウに対してQEvent::Close イベントを処理することで、この動作を制御できます。

終了が中断されなければ、アプリケーションはリターンコード 0(成功)で終了します。

中断される可能性を完全に排除してアプリケーションを終了させるには、exit() を直接呼び出してください。なお、このメソッドはスレッドセーフではありません。

QueuedConnection を使用して、常にこのスロットにシグナルを接続することが推奨されます。制御がメインイベントループに入る前(たとえば、「int main」がexec() を呼び出す前など)に、このスロットに接続された(キューに入れられていない)シグナルが発信された場合、スロットは効果を発揮せず、アプリケーションは終了しません。 キュー化された接続を使用することで、制御がメインイベントループに入るまでスロットが呼び出されないことが保証されます。

例:

QPushButton *quitButton = new QPushButton("Quit");
QObject::connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);

スレッドセーフに関する注意:この関数は、どのスレッドからでも呼び出すことができ、スレッドセーフな方法で現在実行中のメインアプリケーションループを終了させることができます。ただし、QCoreApplication オブジェクトが同時に破棄されている場合、スレッドセーフは保証されません。

注: この関数はスレッドセーフです。

関連項目: exit() およびaboutToQuit()。

[static] void QCoreApplication::removeLibraryPath(const QString &path)

ライブラリパス一覧から「path 」を削除します。path が空であるか、パス一覧に含まれていない場合は、一覧は変更されません。

QCoreApplication のインスタンスが破棄されると、ライブラリパスはデフォルト値にリセットされます。

警告: QLibrary は現在、非絶対ライブラリパスを検索するためにlibraryPaths() を使用していません。

関連項目: addLibraryPath()、libraryPaths()、およびsetLibraryPaths()。

void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)

このオブジェクトからイベントfilterObject を削除します。そのようなイベントフィルタがインストールされていない場合、このリクエストは無視されます。

このオブジェクトが破棄されると、このオブジェクトに対するすべてのイベントフィルタは自動的に削除されます。

イベントフィルタの有効化中(つまり、nativeEventFilter() 関数内)であっても、イベントフィルタを削除することは常に安全です。

installNativeEventFilter()も参照してください 。

[static] void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)

指定されたeventType の、receiver に対してpostEvent()を使用して投稿されたすべてのイベントを削除します。

イベントはディスパッチされるのではなく、キューから削除されます。この関数を呼び出す必要は通常ありません。万が一呼び出す場合は、イベントを強制的に削除することで、receiver が1つ以上の不変条件を破る可能性があることに注意してください。

receiver がnullptr の場合、eventType のイベントがすべてのオブジェクトから削除されます。eventType が0の場合、receiver のイベントがすべて削除されます。eventType が0の状態でこの関数を呼び出してはいけません。

注: この関数はスレッドセーフです。

[static] bool QCoreApplication::removeTranslator(QTranslator *translationFile)

このアプリケーションで使用されている翻訳ファイルの一覧から、翻訳ファイル「translationFile 」を削除します(ファイルシステム上の翻訳ファイル自体は削除されません)。

この関数は、成功した場合はtrue を返し、失敗した場合は false を返します。

installTranslator()、translate()、およびQObject::tr()も参照してください 。

[since 6.5] template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, Functor &&functor)

指定されたpermission をリクエストします。

リクエストの準備が整うと、functor は `functor(const QPermission &permission)` として呼び出され、permission がリクエストの結果を記述します。

functor は、独立した関数または静的メンバ関数であることができます:

qApp->requestPermission(QCameraPermission{}, &permissionUpdated);

あるいはラムダ式でも構いません:

qApp->requestPermission(QCameraPermission{}, [](const QPermission &permission) {
});

ユーザーがリクエストされた `permission` をアプリケーションに明示的に許可した場合、または指定されたプラットフォーム上で `permission ` がユーザーの承認を必要としないことが判明している場合、ステータスは `Qt::PermissionStatus::Granted` となります。

ユーザーがアプリケーションに対して要求されたpermission を明示的に拒否した場合、またはpermission が特定のプラットフォーム上のアプリケーションでは利用できない、あるいは適用されないことが判明している場合、ステータスはQt::PermissionStatus::Denied となります。

リクエストの結果がQt::PermissionStatus::Undetermined となることは決してありません。

注:権限の 要求はメインスレッドからのみ行うことができます。

この関数は Qt 6.5 で導入されました。

checkPermission() およびアプリケーションの権限も参照してください 。

[since 6.5] template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, const QObject *context, Functor functor)

context のコンテキストにおいて、指定されたpermission をリクエストします。

リクエストの準備が整うと、functor はfunctor(const QPermission &permission) として呼び出され、permission がリクエストの結果を表します。

functor は、独立した関数でも、静的メンバ関数でもかまいません。

qApp->requestPermission(QCameraPermission{}, context, &permissionUpdated);

ラムダ式:

qApp->requestPermission(QCameraPermission{}, context, [](const QPermission &permission) {
});

または、context オブジェクト内のスロット:

qApp->requestPermission(QCameraPermission{}, this, &CamerWidget::permissionUpdated);

functor は、context オブジェクトのスレッド内で呼び出されます。リクエストが完了する前にcontext が破棄された場合、functor は呼び出されません。

ユーザーがアプリケーションに対して要求されたpermission を明示的に許可した場合、または特定のプラットフォームにおいてpermission がユーザーの認証を必要としないことが判明している場合、ステータスはQt::PermissionStatus::Granted となります。

ユーザーがアプリケーションに対して要求されたpermission を明示的に拒否した場合、またはpermission がそのプラットフォーム上のアプリケーションでは利用できない、あるいは適用されないことがわかっている場合、ステータスはQt::PermissionStatus::Denied になります。

リクエストの結果がQt::PermissionStatus::Undetermined になることは決してありません。

注:権限の 要求はメインスレッドからのみ行うことができます。

これはオーバーロードされた関数です。

この関数は Qt 6.5 で導入されました。

checkPermission() およびアプリケーションの権限も参照してください 。

[static] bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)

notify() 関数を使用して、イベント `event ` を直接受信者 `receiver` に送信します。イベントハンドラから返された値を返します。

イベントが送信されても、そのイベントは削除されません。一般的な手法としては、スタック上にイベントを作成します。例:

QMouseEvent event(QEvent::MouseButtonPress, localPos, globalPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(mainWindow, &event);

postEvent() およびnotify()も参照してください 。

[static] void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)

QCoreApplication::postEvent() によって以前にキューに入れられ、オブジェクトreceiver に対するものであり、イベントタイプがevent_type であるすべてのイベントを直ちにディスパッチします。

ウィンドウシステムからのイベントは、この関数ではなく、processEvents() によってディスパッチされます。

receiver がnullptr の場合、event_type のイベントがすべてのオブジェクトに対して送信されます。event_type が 0 の場合、receiver に対するすべてのイベントが送信されます。

注:この メソッドは 、そのQObject パラメータであるreceiver が存在するスレッドから呼び出す必要があります。

postEvent()も参照してください 。

[static] void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)

on がtrueの場合、attribute 属性を設定します。そうでない場合は、この属性をクリアします。

注: QCoreApplication インスタンスを作成する前に、一部のアプリケーション属性を設定 する必要があります。詳細については、Qt::ApplicationAttribute のドキュメントを参照してください。

関連項目 :testAttribute()

[static] void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)

メインスレッドのイベントディスパッチャをeventDispatcher に設定します。これは、まだイベントディスパッチャが設定されていない場合、つまりQCoreApplication がインスタンス化される前にのみ可能です。このメソッドは、オブジェクトの所有権を取得します。

eventDispatcher()も参照してください 。

[static] void QCoreApplication::setLibraryPaths(const QStringList &paths)

QLibrary を使用してプラグインを読み込む際の検索ディレクトリ一覧を、paths に設定します。既存のパスはすべて削除され、パス一覧はpaths で指定されたパスとアプリケーションへのパスで構成されます。

QCoreApplication のインスタンスが破棄されると、ライブラリパスはデフォルト値にリセットされます。

警告: QLibrary は 現在、指定されたパスを使用して非絶対ライブラリパスを検索しません。

関連項目: libraryPaths()、addLibraryPath()、removeLibraryPath()、およびQLibrary 。

[static] void QCoreApplication::setSetuidAllowed(bool allow)

allow が true の場合、UNIX プラットフォーム上でアプリケーションを setuid モードで実行できるようにします。

allow がfalse(デフォルト)の場合、Qtがアプリケーションが実ユーザーIDとは異なる有効ユーザーIDで実行されていることを検出した場合、QCoreApplication インスタンスが作成された時点でアプリケーションは中止されます。

Qtは攻撃対象領域が広いため、setuidプログラムには適したソリューションではありません。しかし、歴史的な理由から、この方式で実行する必要があるアプリケーションも存在します。このフラグを設定すると、そのような状況が検出された際にQtがアプリケーションを中止することを防ぐことができます。なお、このフラグはQCoreApplication インスタンスが作成される前に設定する必要があります。

注: このオプションはセキュリティリスクをもたらすため、有効にしないことを強く推奨します 。もしこのアプリケーションがこのフラグを有効にして子プロセスを起動する場合、自身に対してsetuid(2) を呼び出すか、遅くともQProcess::UnixProcessParameters::ResetIdsフラグを使用して、できるだけ早く特権を放棄する必要があります。

isSetuidAllowed()も参照してください 。

[static] bool QCoreApplication::startingUp()

アプリケーションオブジェクトがまだ作成されていない場合は `true ` を返し、それ以外の場合は `false` を返します。

closingDown()も参照してください 。

[static] bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)

属性attribute が設定されている場合はtrue を返し、そうでない場合はfalse を返します。

setAttribute()も参照してください 。

[static] QString QCoreApplication::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

インストール済みの翻訳ファイルを照会し、sourceText の翻訳テキストを返します。翻訳ファイルの検索は、最も新しくインストールされたファイルから順に、最初にインストールされたファイルまで行われます。

QObject::tr() を使用すると、この機能をより便利に利用できます。

context は通常、クラス名(例:「MyDialog」)であり、sourceText は英語テキストか、識別用の短いテキストのいずれかです。

disambiguation は、同じコンテキスト内で異なる役割において同じsourceText が使用される場合に備えて、識別用の文字列です。デフォルトでは、nullptr となります。

コンテキスト、曖昧性の解消、およびコメントに関する詳細については、QTranslator およびQObject::tr() のドキュメントを参照してください。

n は、複数形に対応するために%n と組み合わせて使用されます。詳細については、QObject::tr() を参照してください。

どの翻訳ファイルにも、context 内のsourceText に対する翻訳が含まれていない場合、この関数はsourceText に相当するQString を返します。

この関数は仮想関数ではありません。QTranslator をサブクラス化することで、別の翻訳手法を使用することができます。

注: この関数はスレッドセーフです。

QObject::tr()、installTranslator()、removeTranslator()、およびInternationalization and Translationsも参照してください 。

関連する非メンバー関数

void qAddPostRoutine(QtCleanUpFunction ptr)

QCoreApplication のデストラクタから呼び出されるグローバルルーチンを追加します。この関数は通常、プログラム全体の機能に対するクリーンアップルーチンを追加するために使用されます。

クリーンアップルーチンは、追加された順序と逆の順序で呼び出されます。

ptr で指定される関数は、引数を受け取らず、何も返さない必要があります。例:

static int *global_ptr = nullptr;

static void cleanup_ptr()
{
    delete [] global_ptr;
    global_ptr = nullptr;
}

void init_ptr()
{
    global_ptr = new int[100];      // allocate data
    qAddPostRoutine(cleanup_ptr);   // delete later
}

なお、アプリケーション全体やモジュール全体のクリーンアップについては、qAddPostRoutine() は多くの場合適していません。例えば、プログラムが動的に読み込まれるモジュールに分割されている場合、QCoreApplication のデストラクタが呼び出されるずっと前に、関連するモジュールがアンロードされてしまう可能性があります。 そのような場合でも、qAddPostRoutine() の使用が望ましい場合は、qRemovePostRoutine() を使用することで、QCoreApplication のデストラクタによるルーチンの呼び出しを防ぐことができます。例えば、モジュールがアンロードされる前にそのルーチンが呼び出された場合などです。

モジュールやライブラリの場合、参照カウント方式の初期化マネージャーや、Qtの親子削除メカニズムを使用するほうが適している場合があります。以下は、親子メカニズムを使用して適切なタイミングでクリーンアップ関数を呼び出すプライベートクラスの例です:

class MyPrivateInitStuff : public QObject
{
public:
    static MyPrivateInitStuff *initStuff(QObject *parent)
    {
        if (!p)
            p = new MyPrivateInitStuff(parent);
        return p;
    }

    ~MyPrivateInitStuff()
    {
        // cleanup goes here
    }

private:
    MyPrivateInitStuff(QObject *parent)
        : QObject(parent)
    {
        // initialization goes here
    }

    static MyPrivateInitStuff *p;
};

適切な親オブジェクトを選択することで、多くの場合、モジュールのデータを適切なタイミングでクリーンアップできるようになります。

注:この関数は 、Qt 5.10 以降、スレッドセーフとなっています。

注: この関数はスレッドセーフです。

関連項目: qRemovePostRoutine()。

void qRemovePostRoutine(QtCleanUpFunction ptr)

ptr で指定されたクリーンアップルーチンを、QCoreApplication のデストラクタによって呼び出されるルーチンのリストから削除します。このルーチンは、事前にqAddPostRoutine() の呼び出しによってリストに追加されている必要があります。そうでない場合、この関数は何の効果も持ちません。

注:この関数は 、Qt 5.10 以降、スレッドセーフとなっています。

注: この関数はスレッドセーフです。

関連項目: qAddPostRoutine()。

マクロのドキュメント

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)

QCoreApplication のコンストラクタから呼び出されるグローバル関数を追加します。このマクロは通常、アプリケーションが初期化のためにライブラリを呼び出す必要なく、プログラム全体で機能するライブラリを初期化するために使用されます。

ptr で指定される関数は、引数を受け取らず、戻り値も返さない必要があります。例:

// Called once QCoreApplication exists
static void preRoutineMyDebugTool()
{
    MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance());
    QCoreApplication::instance()->installEventFilter(tool);
}

Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)

startup関数は、QCoreApplication コンストラクタの終了時、GUIの初期化が行われる前に実行される点に注意してください。関数内でGUIコードが必要な場合は、タイマー(またはキュー化された呼び出し)を使用して、後でイベントループから初期化を実行するようにしてください。

QCoreApplication が削除され、別のQCoreApplication が作成された場合、startup関数は再度呼び出されます。

注:この マクロは、アプリケーションに静的にリンクされるライブラリコードでの使用には適していません。リンカによって関数が削除され、まったく呼び出されない可能性があるためです。

注:このマクロは再入可能です。

Q_DECLARE_TR_FUNCTIONS(context)

Q_DECLARE_TR_FUNCTIONS() マクロは、以下のシグネチャを持つ変換関数tr() を宣言および実装します。

static inline QString tr(const char *sourceText,
                         const char *comment = nullptr);

このマクロは、QObject を継承していないクラス内でQObject::tr()を使用したい場合に便利です。

Q_DECLARE_TR_FUNCTIONS() は、クラス定義の最上部(最初のpublic: またはprotected: の前)に記述する必要があります。例:

class MyMfcView : public CView
{
    Q_DECLARE_TR_FUNCTIONS(MyMfcView)

public:
    MyMfcView();
    //...
};

context のパラメータは通常、クラス名ですが、任意のテキストを指定することもできます。

Q_OBJECT およびQObject::tr()も参照してください 。

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