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 |
によって継承される: |
プロパティ
|
|
パブリック機能
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 | aboutToQuit() |
void | applicationNameChanged() |
void | applicationVersionChanged() |
void | organizationDomainChanged() |
void | organizationNameChanged() |
静的パブリックメンバ
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アプリケーションでは、1つのQCoreApplicationオブジェクトが必要です。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関数を使用する際、例えば、浮動小数点数と文字列のようなデータ型間で変換する際に、ロケールによって表記が異なるため、衝突を引き起こす可能性があります。この問題を回避するには、QApplication,QGuiApplication または QCoreApplication を初期化した直後に POSIX 関数setlocale(LC_NUMERIC,"C")
を呼び出して、数値フォーマットに使用されるロケールを "C "ロケールにリセットしてください。
QGuiApplication 、QAbstractEventDispatcher 、QEventLoop 、セマフォを使用するProducerとConsumer、および待機条件を使用するProducerとConsumerも参照してください 。
プロパティ・ドキュメント
applicationName : QString
このプロパティは、このアプリケーションの名前を保持します。
アプリケーション名は様々な Qt クラスやモジュールで使用され、最も顕著なのはQSettings でデフォルトコンストラクタを使用して構築される場合です。その他の使用例としては、整形されたログ出力(qSetMessagePattern() を参照)、QCommandLineParser の出力、QTemporaryDir とQTemporaryFile のデフォルトパス、QStandardPaths の一部のファイルの場所などがあります。 Qt D-BusアクセシビリティとXCBプラットフォーム統合も、アプリケーション名を使用します。
設定されていない場合、アプリケーション名のデフォルトは実行可能ファイル名です。
アクセス関数:
QString | applicationName() |
void | setApplicationName(const QString &application) |
ノーティファイア・シグナル:
void | applicationNameChanged() |
organizationName,organizationDomain,applicationVersion,applicationFilePath()も参照 。
applicationVersion : QString
このプロパティは、このアプリケーションのバージョンを保持します。
設定されていない場合、アプリケーションのバージョンは、メインアプリケーションの実行ファイルまたはパッケージから決定されるプラットフォーム固有の値がデフォルトとなります(Qt 5.9以降):
プラットフォーム | ソース |
---|---|
Windows (クラシックデスクトップ) | VERSIONINFOリソースのPRODUCTVERSIONパラメータ |
macOS、iOS、tvOS、watchOS | 情報プロパティリストのCFBundleVersionプロパティ |
アンドロイド | AndroidManifest.xml マニフェスト要素の android:versionName プロパティ。 |
その他のプラットフォームでは、デフォルトは空文字列です。
アクセス関数:
QString | applicationVersion() |
void | setApplicationVersion(const QString &version) |
Notifier シグナル:
void | applicationVersionChanged() |
applicationName 、organizationName 、organizationDomainも参照してください 。
organizationDomain : QString
このプロパティは、このアプリケーションを作成した組織のインターネット・ドメインを保持します。
この値は、QSettings クラスがデフォルトのコンストラクタを使用して構築されるときに使用されます。これにより、QSettings オブジェクトが作成されるたびに、この情報を繰り返す必要がなくなります。
Mac では、QSettings が空文字列でない場合は organizationDomain() を組織として使用し、それ以外の場合はorganizationName() を使用します。それ以外のプラットフォームでは、QSettings がorganizationName() を組織として使用する。
アクセス関数
QString | organizationDomain() |
void | setOrganizationDomain(const QString &orgDomain) |
Notifier シグナル:
void | organizationDomainChanged() |
organizationName 、applicationName 、applicationVersionも参照の こと。
organizationName : QString
このプロパティは、このアプリケーションを作成した組織の名前を保持します。
この値は、QSettings クラスがデフォルトのコンストラクタを使用して構築されるときに使用されます。これにより、QSettings オブジェクトが作成されるたびに、この情報を繰り返す必要がなくなります。
Mac では、QSettings が空文字列でない場合、organizationDomain() を組織として使用し、そうでない場合は organizationName() を使用します。それ以外のプラットフォームでは、QSettings organizationName()を組織として使用する。
アクセス関数:
QString | organizationName() |
void | setOrganizationName(const QString &orgName) |
Notifier シグナル:
void | organizationNameChanged() |
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 アプリケーションを構築します。コアアプリケーションはグラフィカルユーザーインターフェースを持たないアプリケーションです。このようなアプリケーションは、コンソールやサーバープロセスとして使用されます。
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つのエントリで構成されます。INSTALL/plugins
INSTALL
は Qt がインストールされたディレクトリです。もう1つはアプリケーション自身のディレクトリ(カレントディレクトリではない)ですが、QCoreApplication オブジェクトがインスタンス化された後にのみ指定されます。
QCoreApplication のインスタンスがデストラクトされると、ライブラリ・パスはデフォルトにリセットされます。
removeLibraryPath()、libraryPaths()、setLibraryPaths()も参照 。
[static]
QString QCoreApplication::applicationDirPath()
アプリケーションの実行ファイルを含むディレクトリを返します。
例えば、C:\Qt
ディレクトリに Qt をインストールし、regexp
のサンプルを実行した場合、この関数は "C:/Qt/examples/tools/regexp" を返します。
macOSとiOSの場合、これは実際に実行ファイルを含むディレクトリを指し、アプリケーション・バンドル(アプリケーションがバンドルされている場合)の中にあるかもしれません。
警告 Linux では、この関数は/proc
ファイルシステムからパスを取得しようとします。これが失敗すると、argv[0]
に実行ファイルの絶対ファイル名が含まれていると仮定します。また、この関数は、カレント・ディレクトリがアプリケーションによって変更されていないことを前提とする。
applicationFilePath()も参照 。
[static]
QString QCoreApplication::applicationFilePath()
アプリケーションの実行ファイルのパスを返します。
例えば、/usr/local/qt
ディレクトリに Qt をインストールし、regexp
のサンプルを実行した場合、この関数は "/usr/local/qt/examples/tools/regexp/regexp" を返します。
警告: Linuxでは、この関数は/proc
ファイルシステムからパスを取得しようとする。これに失敗した場合、argv[0]
に実行ファイルの絶対ファイル名が含まれていると仮定します。また、この関数は、カレント・ディレクトリがアプリケーションによって変更されていないことを前提とする。
applicationDirPath()も参照 。
[static]
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パラメータからリストが構築される。この場合、エンコードの問題が発生する可能性がある。
そうでない場合は、GetCommandLine()の戻り値からarguments()が構築される。この結果、アプリケーションの起動方法によっては、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() とApplication Permissionsも参照してください 。
[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()を使用してメインスレッドからこの関数を呼び出します。
void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
アプリケーションによってメイン・スレッドで受信されるすべてのネイティブ・イベントに対して、イベント・フィルターfilterObj をインストールする。
イベント・フィルターfilterObj は、メイン・スレッドで受信したすべてのネイティブ・イベントに対して呼び出されるnativeEventFilter() 関数を介してイベントを受信します。
QAbstractNativeEventFilter::nativeEventFilter()関数は、イベントがフィルターされるべき、つまり停止されるべきであれば、true を返すべきである。ネイティブイベントは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 の所有権を持ちません。
removeTranslator ()、translate ()、QTranslator::load ()、および「Prepare for Dynamic Language Changes」も参照して ください。
[static noexcept]
QCoreApplication *QCoreApplication::instance()
アプリケーションのQCoreApplication (またはQGuiApplication/QApplication )インスタンスへのポインタを返します。
インスタンスが割り当てられていない場合は、nullptr
が返されます。
[static]
bool QCoreApplication::isSetuidAllowed()
アプリケーションがUNIXプラットフォーム上でsetuid実行を許可されている場合、trueを返す。
QCoreApplication::setSetuidAllowed()も参照のこと 。
[static]
QStringList QCoreApplication::libraryPaths()
ライブラリを動的にロードする際にアプリケーションが検索するパスのリストを返します。
この関数の返り値は、QCoreApplication を作成するときに変更される可能性があります。QCoreApplication を作成する前にこの関数を呼び出すことは推奨されません。アプリケーションの実行ディレクトリー(作業ディレクトリーではありません)が既知であれば、そのディレクトリーはリストの一部となります。それを知るためには、argv[0]
を使って探すので、QCoreApplication を作成する必要があります。
Qtはデフォルトのライブラリパスを提供しますが、qt.confファイルを使って設定することもできます。このファイルで指定されたパスはデフォルト値を上書きします。qt.confファイルがアプリケーション実行ファイルのディレクトリにある場合、QCoreApplication が作成されるまで見つからないことがあります。この関数を呼び出したときに見つからない場合は、デフォルトのライブラリパスが使用されます。
このリストには、プラグインのインストールディレクトリが存在する場合は、そのディレクトリも含まれます(プラグインのデフォルトのインストールディレクトリはINSTALL/plugins
で、INSTALL
は Qt がインストールされたディレクトリです)。コロンで区切られたQT_PLUGIN_PATH
環境変数のエントリは常に追加されます。プラグインのインストール・ディレクトリ(およびその存在)は、アプリケーションの実行ファイルのディレクトリが判明した時点で変更される可能性があります。
setLibraryPaths()、addLibraryPath()、removeLibraryPath()、QLibrary 、およびQt プラグインの作成方法も参照してください 。
[virtual]
bool QCoreApplication::notify(QObject *receiver, QEvent *event)
event をreceiver に送信 :receiver->event(event).受信者のイベントハンドラから返される値を返す。この関数は、どのスレッドのどのオブジェクトに送られたイベントに対しても呼び出されることに注意してください。
特定のタイプのイベント(マウス・イベントやキー・イベントなど)では、レシーバーがそのイベントに興味がない場合、イベントはレシーバーの親に伝搬され、トップ・レベルのオブジェクトまで伝搬されます(つまり、false
を返します)。
イベントを処理する方法は5種類あり、この仮想関数を再実装するのはそのうちの1つに過ぎません。この仮想関数を再実装するのはその1つに過ぎない:
- paintEvent ()、mousePressEvent ()などを再実装する。これが最も一般的で、最も簡単で、最も強力でない方法である。
- この関数を再実装する。これは非常に強力で、完全な制御を提供しますが、一度にアクティブにできるのは1つのサブクラスだけです。
- QCoreApplication::instance ()にイベント・フィルターを設置する。このようなイベント・フィルタは、すべてのウィジェットのすべてのイベントを処理できるので、notify()を再実装するのと同じくらい強力です。さらに、複数のアプリケーション・グローバル・イベント・フィルタを持つことができます。グローバル・イベント・フィルタは、disabled widgets のマウス・イベントまで見ることができます。アプリケーション・イベント・フィルターは、メイン・スレッドに存在するオブジェクトに対してのみ呼び出されることに注意してください。
- QWidget のように)QObject::event ()を再実装する。このようにすると、Tabキーが押され、ウィジェット固有のイベントフィルターよりも先にイベントを見ることができます。
- オブジェクトにイベントフィルターをインストールする。このようなイベントフィルターは、フォーカス・ウィジェットを変更しない限り、TabとShift+Tabキー押下イベントを含むすべてのイベントを取得します。
将来の方向性:Qt 7 では、この関数はメインスレッドの外にあるオブジェクトに対しては呼び出されません。その機能を必要とするアプリケーションは、イベント検査の必要性に対して他の解決策を見つける必要があります。この変更はメインスレッドにも適用され、この関数は非推奨になるかもしれません。
警告 この関数をオーバーライドする場合、イベントを処理するすべてのスレッドが、アプリケーション・オブジェクトの破棄を開始する前に停止するようにしなければなりません。これは、使用している他のライブラリによって開始されたスレッドを含みますが、Qt自身のスレッドには適用されません。
QObject::event() およびinstallNativeEventFilter()も参照してください 。
[static]
void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
オブジェクトreceiver をイベントのレシーバーとして、イベントevent をイベント・キューに追加し、すぐに戻ります。
ポスト・イベント・キューがイベントの所有権を持ち、イベントがポストされるとそれを削除するので、イベントはヒープ上に確保されなければならない。ポストされた後のイベントにアクセスするのは安全ではない。
制御がメイン・イベント・ループに戻ると、キューに格納されているすべてのイベントが、notify ()関数を使用して送信される。
イベントはpriority の降順でソートされる。つまり、priority の高いイベントは、priority の低いイベントの前にキューに入れられる。priority は、INT_MAXからINT_MINの間(INT_MAXからINT_MINを含む)の任意の整数値である。詳細はQt::EventPriority を参照。priority が等しいイベントは、ポストされた順番に処理される。
注:この関数はスレッドセーフである。
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()
アプリケーションに終了を要求する。
アプリケーションが終了を妨げる場合、例えばウィンドウを閉じることができない場合、リクエストは無視されるかもしれない。アプリケーションは、アプリケーション・レベルでQEvent::Quit イベントを処理するか、個々のウィンドウでQEvent::Close イベントを処理することによって、これに影響を与えることができます。
終了が中断されなければ、アプリケーションはリターン・コード0(成功)で終了します。
中断されることなくアプリケーションを終了するには、exit ()を直接呼び出します。このメソッドはスレッドセーフではないことに注意してください。
QueuedConnectionこのスロットに接続された(キューイングされていない)シグナルが、制御がメイン・イベン ト・ループに入る前(例えば、"int main "がexec ()を呼び出す前)に 発せられると、このスロットは何もせず、アプリケーションは終了しません。キュー接続を使用すると、制御がメイン・イベント・ループに入るまで、スロットが呼び出されないようになります。
例
QPushButton *quitButton = new QPushButton("Quit"); connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
スレッドセーフに関する注意: この関数は、現在実行中のメインアプリケーションループをスレッドセーフに終了させるために、どのスレッドからでも呼び出すことができます。ただし、QCoreApplication オブジェクトが同時に破棄される場合、スレッドセーフは保証されません。
注意:この関数はスレッドセーフである。
exit() およびaboutToQuit()も参照のこと 。
[static]
void QCoreApplication::removeLibraryPath(const QString &path)
ライブラリ・パス・リストからpath を削除する。path が空であるか、パスリストにない場合、リストは変更されない。
QCoreApplication のインスタンスが破棄されると、ライブラリ・パスはデフォルトにリセットされます。
addLibraryPath()、libraryPaths()、setLibraryPaths()も参照してください 。
void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
このオブジェクトからイベントfilterObject を削除する。そのようなイベントフィルターがインストールされていない場合、リクエストは無視されます。
このオブジェクトのすべてのイベントフィルターは、このオブジェクトが破棄されるときに自動的に削除されます。
イベントフィルタの起動中(つまり nativeEventFilter() 関数から)であっても、イベントフィルタを削除することは常に安全です。
installNativeEventFilter()も参照してください 。
[static]
void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)
receiver に対してpostEvent() を使用してポストされた、与えられたeventType のすべてのイベントを削除する。
イベントはディスパッチされず、キューから削除されます。この関数を呼ぶ必要はありません。この関数を呼び出す場合、イベントを削除すると、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() とApplication Permissionsも参照してください 。
[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() およびApplication Permissionsも参照してください 。
[static]
bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
notify() 関数を使用して、イベントevent をレシーバーreceiver に直接送信します。イベント・ハンドラから返された値を返す。
イベントが送信されても、イベントは削除されません。通常のアプローチは、スタック上にイベントを作成することなどです:
QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0); QApplication::sendEvent(mainWindow, &event);
[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 のインスタンスがデストラクトされると、ライブラリのパスはデフォルトにリセットされます。
libraryPaths()、addLibraryPath()、removeLibraryPath()、QLibraryも参照 。
[static]
void QCoreApplication::setSetuidAllowed(bool allow)
allow が true の場合、アプリケーションが UNIX プラットフォームで setuid を実行できるようにします。
allow が偽の場合(デフォルト)、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 に相当する翻訳がない場合、この関数はQString のsourceText に相当する翻訳を返します。
この関数は仮想ではありません。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()を使用することが望ましい場合は、QCoreApplication デストラクタによってルーチンが呼び出されないようにするために、qRemovePostRoutine()を使用することができる。例えば、モジュールがアンロードされる前にそのルーチンが呼び出された場合などである。
モジュールやライブラリの場合、参照カウントされた初期化マネージャーや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 } MyPrivateInitStuff *p; };
適切な親オブジェクトを選択することで、モジュールのデータを適切なタイミングでクリーンアップすることができます。
注意: この関数は Qt 5.10 からスレッドセーフになりました。
注意:この関数はスレッドセーフです。
qRemovePostRoutine()も参照してください 。
void qRemovePostRoutine(QtCleanUpFunction ptr)
QCoreApplication デストラクタによって呼び出されたルーチンのリストから、ptr によって指定されたクリーンアップ・ルーチンを削除する。このルーチンは、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)
スタートアップ関数は、QCoreApplication コンストラクタの最後で、GUI の初期化の前に実行されることに注意してください。関数内でGUIコードが必要な場合は、タイマー(またはキュー呼び出し)を使用して、イベントループから後で初期化を実行してください。
QCoreApplication が削除され、別のQCoreApplication が作成されると、スタートアップ関数が再度呼び出されます。
注意: このマクロは、アプリケーションに静的にリンクされるライブラリ・コードでの使用には適していません。
注意:このマクロはリエントラントである。
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()も参照してください 。
© 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.