QCoreApplication 类

QCoreApplication 类为没有 UI 的 Qt 应用程序提供事件循环。 更多...

Header: #include <QCoreApplication>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QObject
继承者:

QGuiApplication

特性

公共函数

QCoreApplication (int & argc , char ** argv )
virtual ~QCoreApplication ()
void installNativeEventFilter (QAbstractNativeEventFilter * filterObj )
virtual bool notify (QObject * receiver , QEvent * event )
void removeNativeEventFilter (QAbstractNativeEventFilter * filterObject )

公共槽

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

信号

静态公共成员

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

详细描述

This class is used by non-GUI applications to provide their event loop. For non-GUI application that uses Qt, there should be exactly one QCoreApplication object. For GUI applications, see QGuiApplication . For applications that use the Qt Widgets module, see QApplication .

QCoreApplication contains the main event loop, where all events from the operating system (e.g., timer and network events) and other sources are processed and dispatched. It also handles the application's initialization and finalization, as well as system-wide and application-wide settings.

事件循环和事件处理

开始事件循环通过调用 exec ()。长时间运行的操作可以调用 processEvents () 以保持应用程序的响应速度。

通常,推荐创建 QCoreApplication, QGuiApplication QApplication 对象在您的 main() function as early as possible. exec () will not return until the event loop exits; e.g., when quit () 被调用。

Several static convenience functions are also provided. The QCoreApplication object is available from instance (). Events can be sent with sendEvent () or posted to an event queue with postEvent (). Pending events can be removed with removePostedEvents () or dispatched with sendPostedEvents ().

类提供 quit () 槽和 aboutToQuit () 信号。

应用程序和库路径

应用程序有 applicationDirPath () 和 applicationFilePath ()。库路径 (见 QLibrary ) 可以被检索采用 libraryPaths () 和操纵通过 setLibraryPaths (), addLibraryPath (),和 removeLibraryPath ().

国际化和翻译

可以添加或移除翻译文件使用 installTranslator () 和 removeTranslator ()。可以翻译应用程序字符串使用 translate ()。 QObject::tr () function is implemented in terms of translate ().

访问命令行自变量

访问传递给 QCoreApplication 构造函数的命令行自变量应使用 arguments () 函数。

注意: QCoreApplication 移除选项 -qmljsdebugger="..." 。它剖析自变量为 qmljsdebugger ,然后删除此选项及其自变量。

对于更高级命令行选项处理,创建 QCommandLineParser .

区域设置

On Unix/Linux Qt is configured to use the system locale settings by default. This can cause a conflict when using POSIX functions, for instance, when converting between data types such as floats and strings, since the notation may differ between locales. To get around this problem, call the POSIX function setlocale(LC_NUMERIC,"C") right after initializing QApplication , QGuiApplication or QCoreApplication to reset the locale that is used for number formatting to "C"-locale.

另请参阅 QGuiApplication , QAbstractEventDispatcher , QEventLoop , 信号量范例 ,和 等待条件范例 .

特性文档编制

applicationName : QString

此特性保持该应用程序的名称

值用于 QSettings 类当使用空构造函数构造它时。这节省必须重复此信息每次 QSettings 对象被创建。

若未设置,应用程序名称默认为可执行文件名称 (从 5.0 起)。

访问函数:

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

通知程序信号:

void applicationNameChanged ()

另请参阅 organizationName , organizationDomain , applicationVersion ,和 applicationFilePath ().

applicationVersion : QString

此特性保持该应用程序的版本

若未设置,应用程序版本默认为由主应用程序可执行文件或包确定的特定平台值 (从 Qt 5.9 起):

平台 Source
Windows (经典桌面) VERSIONINFO 资源的 PRODUCTVERSION 参数
macOS, iOS, tvOS, watchOS 信息特性列表的 CFBundleVersion 属性
Android AndroidManifest.xml 清单元素的 android:versionName 特性

在其它平台,默认为空字符串。

访问函数:

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

通知程序信号:

void applicationVersionChanged ()

另请参阅 applicationName , organizationName ,和 organizationDomain .

organizationDomain : QString

This property holds the Internet domain of the organization that wrote this application

值用于 QSettings 类当使用空构造函数构造它时。这节省必须重复此信息每次 QSettings 对象被创建。

在 Mac, QSettings uses organizationDomain() as the organization if it's not an empty string; otherwise it uses organizationName (). On all other platforms, QSettings 使用 organizationName () as the organization.

访问函数:

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

通知程序信号:

void organizationDomainChanged ()

另请参阅 organizationName , applicationName ,和 applicationVersion .

organizationName : QString

此特性保持编写此应用程序的组织名称

值用于 QSettings 类当使用空构造函数构造它时。这节省必须重复此信息每次 QSettings 对象被创建。

在 Mac, QSettings 使用 organizationDomain() 作为组织若它不是空字符串; 否则它使用 organizationName()。在所有其它平台, QSettings 使用 organizationName() 作为组织。

访问函数:

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

通知程序信号:

void organizationNameChanged ()

另请参阅 organizationDomain and applicationName .

quitLockEnabled : bool

此特性保持是否使用 QEventLoopLocker 特征,可能导致应用程序离开。

默认为 true .

访问函数:

bool isQuitLockEnabled ()
void setQuitLockEnabled (bool enabled )

另请参阅 QEventLoopLocker .

成员函数文档编制

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

Constructs a Qt core application. Core applications are applications without a graphical user interface. Such applications are used at the console or as server processes.

argc and argv arguments are processed by the application, and made available in a more convenient form by the arguments () 函数。

警告: The data referred to by argc and argv must stay valid for the entire lifetime of the QCoreApplication object. In addition, argc must be greater than zero and argv must contain at least one valid character string.

[private signal] void QCoreApplication:: aboutToQuit ()

This signal is emitted when the application is about to quit the main event loop, e.g. when the event loop level drops to zero. This may happen either after a call to quit () from inside the application or when the user shuts down the entire desktop session.

The signal is particularly useful if your application has to do some last-second cleanup. Note that no user interaction is possible in this state.

注意: 这是私有信号。它可以用于信号连接,但不能由用户发射。

另请参阅 quit ().

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

告诉应用程序采用返回代码去退出。

After this function has been called, the application leaves the main event loop and returns from the call to exec ()。 exec () 函数返回 returnCode . If the event loop is not running, this function does nothing.

按约定, returnCode 0 意味着成功,而任何非零值指示出错。

It's good practice to always connect signals to this slot using a QueuedConnection . If a signal connected (non-queued) to this slot is emitted before control enters the main event loop (such as before "int main" calls exec() ), the slot has no effect and the application never exits. Using a queued connection ensures that the slot will not be invoked until after control enters the main event loop.

注意:不像同名 C 库函数,此函数 does 返回给调用者 -- 它停止事件处理。

Note also that this function is not thread-safe. It should be called only from the main thread (the thread that the QCoreApplication object is processing events on). To ask the application to exit from another thread, either use QCoreApplication::quit () or instead call this function from the main thread with QMetaMethod::invokeMethod().

另请参阅 quit () 和 exec ().

[static slot] void QCoreApplication:: quit ()

Asks the application to quit.

The request may be ignored if the application prevents the quit, for example if one of its windows can't be closed. The application can affect this by handling the QEvent::Quit event on the application level, or QEvent::Close events for the individual windows.

If the quit is not interrupted the application will exit with return code 0 (success).

To exit the application without a chance of being interrupted, call exit () directly. Note that method is not thread-safe.

It's good practice to always connect signals to this slot using a QueuedConnection . If a signal connected (non-queued) to this slot is emitted before control enters the main event loop (such as before "int main" calls exec() ), the slot has no effect and the application never exits. Using a queued connection ensures that the slot will not be invoked until after control enters the main event loop.

范例:

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

线程安全注意事项 : this function may be called from any thread to thread-safely cause the currently-running main application loop to exit. However, thread-safety is not guaranteed if the QCoreApplication object is being destroyed at the same time.

注意: 此函数是 thread-safe .

另请参阅 exit () 和 aboutToQuit ().

[virtual] QCoreApplication:: ~QCoreApplication ()

销毁 QCoreApplication 对象。

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

前置 path 到库路径列表开头,确保首先搜索这些库。若 path 为空或已在路径列表中,路径列表不改变。

默认路径列表由单个条目 (插件安装目录) 组成。插件的默认安装目录为 INSTALL/plugins ,其中 INSTALL 是 Qt 的安装目录。

库路径被重置成默认当实例化的 QCoreApplication 被销毁。

另请参阅 removeLibraryPath (), libraryPaths (),和 setLibraryPaths ().

[static] QString QCoreApplication:: applicationDirPath ()

返回包含应用程序可执行文件的目录。

例如,若有安装 Qt 在 C:\Qt 目录,和运行 regexp example, this function will return "C:/Qt/examples/tools/regexp".

On macOS and iOS this will point to the directory actually containing the executable, which may be inside an application bundle (if the application is bundled).

警告: On Linux, this function will try to get the path from the /proc file system. If that fails, it assumes that argv[0] contains the absolute file name of the executable. The function also assumes that the current directory has not been changed by the application.

另请参阅 applicationFilePath ().

[static] QString QCoreApplication:: applicationFilePath ()

Returns the file path of the application executable.

例如,若有安装 Qt 在 /usr/local/qt 目录,和运行 regexp example, this function will return "/usr/local/qt/examples/tools/regexp/regexp".

警告: On Linux, this function will try to get the path from the /proc file system. If that fails, it assumes that argv[0] contains the absolute file name of the executable. The function also assumes that the current directory has not been changed by the application.

另请参阅 applicationDirPath ().

[static] qint64 QCoreApplication:: applicationPid ()

返回应用程序的当前进程 ID。

[static] QStringList QCoreApplication:: arguments ()

返回命令行自变量列表。

Usually arguments().at(0) is the program name, arguments().at(1) is the first argument, and arguments().last() is the last argument. See the note below about Windows.

Calling this function is slow - you should store the result in a variable when parsing the command line.

警告: On Unix, this list is built from the argc and argv parameters passed to the constructor in the main() function. The string-data in argv is interpreted using QString::fromLocal8Bit (); hence it is not possible to pass, for example, Japanese command line arguments on a system that runs in a Latin1 locale. Most modern Unix systems do not have this limitation, as they are Unicode-based.

On Windows, the list is built from the argc and argv parameters only if modified argv/argc parameters are passed to the constructor. In that case, encoding problems might occur.

Otherwise, the arguments() are constructed from the return value of GetCommandLine() . As a result of this, the string given by arguments().at(0) might not be the program name on Windows, depending on how the application was started.

另请参阅 applicationFilePath () 和 QCommandLineParser .

[static] bool QCoreApplication:: closingDown ()

返回 true 若应用程序对象正在被销毁;否则返回 false .

另请参阅 startingUp ().

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

重实现: QObject::event (QEvent *e).

[static] QAbstractEventDispatcher *QCoreApplication:: eventDispatcher ()

Returns a pointer to the event dispatcher object for the main thread. If no event dispatcher exists for the thread, this function returns nullptr .

另请参阅 setEventDispatcher ().

[static] int QCoreApplication:: exec ()

进入主事件循环并等待,直到 exit () 被调用。返回值被传递给 exit () (其为 0 若 exit () 被调用凭借 quit ()).

有必要调用此函数以启动事件处理。主事件循环从窗口系统接收事件,并将其分派给应用程序 Widget。

要使应用程序履行空闲处理 (通过执行特殊函数,当没有待决事件时),使用 QTimer 采用 0 超时。更高级空闲处理方案可以达成使用 processEvents ().

推荐把清理代码连接到 aboutToQuit() 信号,而非将其放入应用程序的 main() 函数,因为在某些平台,exec() 调用可能不返回。例如在 Windows,当用户注销时,系统在 Qt 关闭所有顶层窗口后终止过程。因此,不保证应用程序会有时间退出其事件循环并执行代码结束 main() 函数在 exec() 调用之后。

另请参阅 quit (), exit (), processEvents (),和 QApplication::exec ().

[since 5.0] void QCoreApplication:: installNativeEventFilter ( QAbstractNativeEventFilter * filterObj )

安装事件过滤器 filterObj 为所有本机接收事件,通过主线程中的应用程序。

事件过滤器 filterObj 接收事件凭借其 nativeEventFilter() function, which is called for all native events received in the main thread.

QAbstractNativeEventFilter::nativeEventFilter () function should return true if the event should be filtered, i.e. stopped. It should return false to allow normal Qt processing to continue: the native event can then be translated into a QEvent and handled by the standard Qt event filtering, e.g. QObject::installEventFilter ().

If multiple event filters are installed, the filter that was installed last is activated first.

注意: The filter function set here receives native messages, i.e. MSG or XCB event structs.

注意: Native event filters will be disabled in the application when the Qt::AA_PluginApplication attribute is set.

For maximum portability, you should always try to use QEvent and QObject::installEventFilter () 每当可能时。

该函数在 Qt 5.0 引入。

另请参阅 QObject::installEventFilter ().

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

添加翻译文件 translationFile 到用于翻译的翻译文件列表。

Multiple translation files can be installed. Translations are searched for in the reverse order in which they were installed, so the most recently installed translation file is searched first and the first translation file installed is searched last. The search stops as soon as a translation containing a matching string is found.

Installing or removing a QTranslator , or changing an installed QTranslator generates a LanguageChange event for the QCoreApplication instance. A QApplication instance will propagate the event to all toplevel widgets, where a reimplementation of changeEvent can re-translate the user interface by passing user-visible strings via the tr () function to the respective property setters. User-interface classes generated by Qt Designer provide a retranslateUi() function that can be called.

函数返回 true 当成功时和 false 当失败时。

另请参阅 removeTranslator (), translate (), QTranslator::load (),和 动态翻译 .

[static] QCoreApplication *QCoreApplication:: instance ()

返回指针指向应用程序的 QCoreApplication (或 QGuiApplication / QApplication ) 实例。

若没有分配实例, nullptr 被返回。

[static, since 5.3] bool QCoreApplication:: isSetuidAllowed ()

返回 true 若允许应用程序在 UNIX 平台运行 setuid。

该函数在 Qt 5.3 引入。

另请参阅 QCoreApplication::setSetuidAllowed ().

[static] QStringList QCoreApplication:: libraryPaths ()

返回将搜索的应用程序路径列表当动态加载库时。

The return value of this function may change when a QCoreApplication is created. It is not recommended to call it before creating a QCoreApplication . The directory of the application executable ( not the working directory) is part of the list if it is known. In order to make it known a QCoreApplication has to be constructed as it will use argv[0] to find it.

Qt provides default library paths, but they can also be set using a qt.conf file. Paths specified in this file will override default values. Note that if the qt.conf file is in the directory of the application executable, it may not be found until a QCoreApplication is created. If it is not found when calling this function, the default library paths will be used.

The list will include the installation directory for plugins if it exists (the default installation directory for plugins is INSTALL/plugins ,其中 INSTALL is the directory where Qt was installed). The colon separated entries of the QT_PLUGIN_PATH environment variable are always added. The plugin installation directory (and its existence) may change when the directory of the application executable becomes known.

若想要遍历列表,可以使用 foreach 伪关键词:

foreach (const QString &path, app.libraryPaths())
    do_something(path);
							

另请参阅 setLibraryPaths (), addLibraryPath (), removeLibraryPath (), QLibrary ,和 如何创建 Qt 插件 .

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

发送 event to receiver : receiver ->event( event )。返回来自接收者的事件处理程序返回的值。注意:此函数被调用,对于被发送给在任何线程中的任何对象的所有事件。

对于某些类型的事件 (如鼠标事件和按键事件),事件会被传播给接收者的父级,依此类推直至顶层对象,若接收者对事件不感兴趣 (即:它返回 false ).

有 5 种不同办法可以处理事件。重新实现此虚函数只是它们之一。以下列出了所有 5 种途径:

  1. 重实现 paintEvent() , mousePressEvent() and so on. This is the most common, easiest, and least powerful way.
  2. Reimplementing this function. This is very powerful, providing complete control; but only one subclass can be active at a time.
  3. Installing an event filter on QCoreApplication::instance (). Such an event filter is able to process all events for all widgets, so it's just as powerful as reimplementing notify(); furthermore, it's possible to have more than one application-global event filter. Global event filters even see mouse events for disabled widgets . Note that application event filters are only called for objects that live in the main thread.
  4. 重实现 QObject::event () (作为 QWidget does). If you do this you get Tab key presses, and you get to see the events before any widget-specific event filters.
  5. Installing an event filter on the object. Such an event filter gets all the events, including Tab and Shift+Tab key press events, as long as they do not change the focus widget.

未来方向: This function will not be called for objects that live outside the main thread in Qt 6. Applications that need that functionality should find other solutions for their event inspection needs in the meantime. The change may be extended to the main thread, causing this function to be deprecated.

警告: If you override this function, you must ensure all threads that process events stop doing so before your application object begins destruction. This includes threads started by other libraries that you may be using, but does not apply to Qt's own threads.

另请参阅 QObject::event () 和 installNativeEventFilter ().

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

添加事件 event ,采用对象 receiver 作为事件接收者,到事件队列并立即返回。

事件必须在堆上被分配,因为 Post 事件队列将获取事件的所有权,且事件一旦已被张贴就会被删除。它是 not safe 去访问事件,其它已被张贴之后。

When control returns to the main event loop, all events that are stored in the queue will be sent using the notify () 函数。

Events are sorted in descending priority order, i.e. events with a high priority are queued before events with a lower priority priority can be any integer value, i.e. between INT_MAX and INT_MIN, inclusive; see Qt::EventPriority for more details. Events with equal priority will be processed in the order posted.

注意: 此函数是 thread-safe .

另请参阅 sendEvent (), notify (), sendPostedEvents (),和 Qt::EventPriority .

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

Processes some pending events for the calling thread according to the specified flags .

Use of this function is discouraged. Instead, prefer to move long operations out of the GUI thread into an auxiliary one and to completely avoid nested event loop processing. If event processing is really necessary, consider using QEventLoop 代替。

在正在运行连续调用此函数的本地循环事件中,若没有事件循环, DeferredDelete 事件不会被处理。这会影响 Widget 的行为,如 QToolTip 依赖 DeferredDelete 事件才能正确运行。替代是调用 sendPostedEvents() 从本地循环中。

调用此函数仅处理调用线程的事件,并在处理所有可用事件后返回。可用事件是在函数调用之前的队列事件。这意味着当函数运行时张贴的事件将被队列,直到稍后一轮的事件处理为止。

注意: 此函数是 thread-safe .

另请参阅 exec (), QTimer , QEventLoop::processEvents (),和 sendPostedEvents ().

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

此函数重载 processEvents()。

处理调用线程待决事件以 ms 毫秒为单位或直到没有更多要处理事件为止,以较短者为准。

Use of this function is discouraged. Instead, prefer to move long operations out of the GUI thread into an auxiliary one and to completely avoid nested event loop processing. If event processing is really necessary, consider using QEventLoop 代替。

调用此函数仅处理调用线程的事件。

注意: 不像 processEvents() 重载,此函数还处理函数运行时发布的事件。

注意: All events that were queued before the timeout will be processed, however long it takes.

注意: 此函数是 thread-safe .

另请参阅 exec (), QTimer ,和 QEventLoop::processEvents ().

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

移除 path 从库路径列表。若 path 为空或不在路径列表中,列表无变化。

库路径被重置成默认当实例化的 QCoreApplication 被销毁。

另请参阅 addLibraryPath (), libraryPaths (),和 setLibraryPaths ().

[since 5.0] void QCoreApplication:: removeNativeEventFilter ( QAbstractNativeEventFilter * filterObject )

移除事件 filterObject from this object. The request is ignored if such an event filter has not been installed.

All event filters for this object are automatically removed when this object is destroyed.

It is always safe to remove an event filter, even during event filter activation (i.e. from the nativeEventFilter() function).

该函数在 Qt 5.0 引入。

另请参阅 installNativeEventFilter ().

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

Removes all events of the given eventType that were posted using postEvent () for receiver .

The events are not dispatched, instead they are removed from the queue. You should never need to call this function. If you do call it, be aware that killing events may cause receiver to break one or more invariants.

receiver is nullptr ,事件的 eventType are removed for all objects. If eventType is 0, all the events are removed for receiver . You should never call this function with eventType of 0.

注意: 此函数是 thread-safe .

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

移除翻译文件 translationFile from the list of translation files used by this application. (It does not delete the translation file from the file system.)

函数返回 true 当成功时和 false 当失败时。

另请参阅 installTranslator (), translate (),和 QObject::tr ().

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

发送事件 event 直接到接收者 receiver ,使用 notify () 函数。返回从事件处理程序返回的值。

事件 not 被删除,当事件被发送后。正常途径是在堆栈上创建事件,例如:

QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0);
QApplication::sendEvent(mainWindow, &event);
							

另请参阅 postEvent () 和 notify ().

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

立即分派之前队列的所有事件采用 QCoreApplication::postEvent () 和为对象 receiver 和事件类型 event_type .

来自窗口系统的事件 not 通过此函数分派,而是通过 processEvents ().

receiver is nullptr ,事件的 event_type 为所有对象发送。若 event_type 为 0,所有事件被发送为 receiver .

注意: 此方法必须被调用从线程以其 QObject 参数, receiver ,存活。

另请参阅 postEvent ().

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

设置属性 attribute if on 为 true;否则清零属性。

注意: 某些应用程序属性必须被设置 before 创建 QCoreApplication 实例。参考 Qt::ApplicationAttribute 文档编制,了解更多信息。

另请参阅 testAttribute ().

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

将主线程事件分派程序设为 eventDispatcher 。这才有可能,只要尚未安装事件分派程序。也就是,先于 QCoreApplication 被实例化。此方法拥有对象的所有权。

另请参阅 eventDispatcher ().

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

Sets the list of directories to search when loading plugins with QLibrary to paths 。所有现有路径被删除且路径列表将由给定路径组成按 paths and the path to the application.

库路径被重置成默认当实例化的 QCoreApplication 被销毁。

另请参阅 libraryPaths (), addLibraryPath (), removeLibraryPath (),和 QLibrary .

[static, since 5.3] void QCoreApplication:: setSetuidAllowed ( bool allow )

允许应用程序在 UNIX 平台运行 setuid 若 allow 为 true。

allow is false (the default) and Qt detects the application is running with an effective user id different than the real user id, the application will be aborted when a QCoreApplication instance is created.

Qt is not an appropriate solution for setuid programs due to its large attack surface. However some applications may be required to run in this manner for historical reasons. This flag will prevent Qt from aborting the application when this is detected, and must be set before a QCoreApplication instance is created.

注意: 强烈推荐不启用此选项,由于它引入安全风险。

该函数在 Qt 5.3 引入。

另请参阅 isSetuidAllowed ().

[static] bool QCoreApplication:: startingUp ()

返回 true 若应用程序对象尚未被创建;否则返回 false .

另请参阅 closingDown ().

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

返回 true 若属性 attribute 已设置;否则返回 false .

另请参阅 setAttribute ().

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

Returns the translation text for sourceText , by querying the installed translation files. The translation files are searched from the most recently installed file back to the first installed file.

QObject::tr () 更方便提供此功能。

context is typically a class name (e.g., "MyDialog") and sourceText is either English text or a short identifying text.

disambiguation is an identifying string, for when the same sourceText is used in different roles within the same context. By default, it is nullptr .

QTranslator and QObject::tr () documentation for more information about contexts, disambiguations and comments.

n is used in conjunction with %n to support plural forms. See QObject::tr () 了解细节。

If none of the translation files contain a translation for sourceText in context , this function returns a QString equivalent of sourceText .

This function is not virtual. You can use alternative translation techniques by subclassing QTranslator .

注意: 此函数是 thread-safe .

另请参阅 QObject::tr (), installTranslator (), removeTranslator (),及 translate()。

相关非成员

void qAddPostRoutine ( QtCleanUpFunction ptr )

Adds a global routine that will be called from the QCoreApplication destructor. This function is normally used to add cleanup routines for program-wide functionality.

The cleanup routines are called in the reverse order of their addition.

The function specified by ptr should take no arguments and should return nothing. For example:

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
}
							

Note that for an application- or module-wide cleanup, qAddPostRoutine() is often not suitable. For example, if the program is split into dynamically loaded modules, the relevant module may be unloaded long before the QCoreApplication destructor is called. In such cases, if using qAddPostRoutine() is still desirable, qRemovePostRoutine () can be used to prevent a routine from being called by the QCoreApplication destructor. For example, if that routine was called before the module was unloaded.

For modules and libraries, using a reference-counted initialization manager or Qt's parent-child deletion mechanism may be better. Here is an example of a private class that uses the parent-child mechanism to call a cleanup function at the right time:

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

By selecting the right parent object, this can often be made to clean up the module's data at the right moment.

注意: 该函数自 Qt 5.10 起是 Thread-Safety (线程安全) 的。

注意: 此函数是 thread-safe .

另请参阅 qRemovePostRoutine ().

[since 5.3] void qRemovePostRoutine ( QtCleanUpFunction ptr )

Removes the cleanup routine specified by ptr from the list of routines called by the QCoreApplication destructor. The routine must have been previously added to the list by a call to qAddPostRoutine (), otherwise this function has no effect.

注意: 该函数自 Qt 5.10 起是 Thread-Safety (线程安全) 的。

注意: 此函数是 thread-safe .

该函数在 Qt 5.3 引入。

另请参阅 qAddPostRoutine ().

宏文档编制

[since 5.1] Q_COREAPP_STARTUP_FUNCTION ( QtStartUpFunction ptr )

Adds a global function that will be called from the QCoreApplication constructor. This macro is normally used to initialize libraries for program-wide functionality, without requiring the application to call into the library for initialization.

The function specified by ptr should take no arguments and should return nothing. For example:

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

Note that the startup function will run at the end of the QCoreApplication constructor, before any GUI initialization. If GUI code is required in the function, use a timer (or a queued invocation) to perform the initialization later on, from the event loop.

QCoreApplication is deleted and another QCoreApplication is created, the startup function will be invoked again.

注意: This macro is not suitable for use in library code that is then statically linked into an application since the function may not be called at all due to being eliminated by the linker.

注意: 此函数是 可重入 .

该函数在 Qt 5.1 引入。

Q_DECLARE_TR_FUNCTIONS ( context )

The Q_DECLARE_TR_FUNCTIONS() macro declares and implements the translation function tr() with this signature:

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

此宏很有用,若想要使用 QObject::tr () in classes that don't inherit from QObject .

Q_DECLARE_TR_FUNCTIONS() must appear at the very top of the class definition (before the first public: or protected: )。例如:

class MyMfcView : public CView
{
    Q_DECLARE_TR_FUNCTIONS(MyMfcView)
public:
    MyMfcView();
    ...
};
							

context parameter is normally the class name, but it can be any text.

另请参阅 Q_OBJECT and QObject::tr ().