类介绍
QCoreApplication类给没有界面的Qt应用程序提供了一个事件循环处理。对于GUI相关的应用程序,可以参考QGuiApplication。如果是含有QWidgets模块的Qt应用程序,则可以参考QApplication。
QCoreApplication类包含了主事件循环,主要处理和调度来自操作系统的所有事件(比如定时器和网络事件等)和其他来源的事件。还处理应用程序的初始化和软件结束收尾的终止化处理,以及系统和应用程序范围内的设置。
QCoreApplication定义在core模块中,为应用程序提供了一个非gui的事件循环;QGuiApplication定义在gui模块中,提供了额外的gui相关的设置,比如桌面设置,风格,字体,调色板,剪切板,光标等;QApplication定义在widgets模块中,是QWidget相关的,能设置双击间隔,按键间隔,拖拽距离和时间,滚轮滚动函数,能获取桌面,激活的窗口,模式控件,弹跳控件等。
注:QApplication是QGuiApplication的子类,QGuiApplication是QCoreApplication的子类。
属性
applicationName:QString
这个属性保存了应用程序的名字。当QSettings类使用空构造函数时,它将使用该值。如果该参数未设置,则默认为可执行文件的名称。
- QString applicationName()
- void setApplicationName(const QString &application)
applicationVersion:QString
这个属性保存了应用程序的版本号。如果没有设置,则应用程序版本默认为根据主应用程序的可执行文件或包的确定的平台特定值。
- QString applicationVersion()
- void setApplicationVersion(const QString &version)
organizationDomain:QString
这个属性保存了应用程序开发者的组织的互联网域名或网址。当QSettings类使用空构造函数时,它将使用该值。
- QString organizationDomain()
- void setOrganizationDomain(const QString &orgDomain)
organizationName:QString
这个属性保存了应用程序开发者的组织的名称。
在Mac系统上,如果organizationDomain()不是空字符串,则QSettins使用organizationDomain作为组织,否则使用organizationName()作为组织。在其他所有平台,QSettings使用organizationName()作为组织。
- QString organizationName()
- void setOrganizationName(const QString &orgName)
//设置相关信息
QCoreApplication::setApplicationName("APPNAME");
QCoreApplication::setApplicationVersion("1.0.0.0");
QCoreApplication::setOrganizationName("Qt");
QCoreApplication::setOrganizationDomain("www.qt.com");
//取出相关信息
QString appName = QCoreApplication::applicationName();
QString appVersion = QCoreApplication::applicationVersion();
QString orgDomain = QCoreApplication::organizationDomain();
QString orgName = QCoreApplication::organizationName();
quitLockEnabled:bool
这个属性保存了使用QEventLoopLocker功能是否会导致应用程序退出,默认是true。
- bool isQuitLockEnabled()
- void setQuitLockEnabled()
成员函数
[signal] void QCoreApplication::aboutToQUit()
当应用程序即将退出主事件循环时,会发出此信号。这可能发生在应用程序调用quit()之后,也可能是用户关闭整个桌面会话时。如果应用程序必须在最后一秒进行处理,该信号就特别有用。需要注意的是,这是一个私有的信号,在此状态下,不可能进行用户交互。
[static] void QCoreApplication::addLibraryPath(cosnt QString &path)
将path添加到插件库路径列表中。如果path为空或者已经在路径列表中,则不会有任何改变。默认的插件库路径列表中有一个条目,即插件的安装目录。插件的默认安装目录是install/plugins,install是Qt的安装目录。
[static] QString QCoreApplication::applicationDirPath()
返回包含应用程序可执行文件的目录。
[static] QString QCoreApplication::applicationFilePath()
返回应用程序可执行文件的文件路径。
[static] qint64 QCoreApplication::applicationPid()
返回当前应用程序的进程id。
[static] QStringList QCoreApplication::arguments()
返回命令行参数列表。
[static] bool QCoreApplication::closingDown()
如果应用对象正在被销毁,返回true,否则返回false。
[override virtual protected] bool QCoreApplication::event(QEvent *e)
重新实现QObject::event()函数。
[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()
返回指向主线程的事件调度程序对象的指针。如果线程不存在事件调度器,则返回nullptr。
[static] int QCoreApplication::exec()
开启主线程事件循环。
[static] void QCoreApplication::exit(int returnCode = 0)
退出应用程序,并返回退出代码。
void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
在主线程中给应用程序安装一个事件过滤器。筛选主线程中接收的所有本机事件。
[static] bool QCoreApplication::installTranslator(QTranslator *translationFile)
将翻译文件translationFile添加到用于翻译的翻译文件列表中。
[static] QCoreApplication *QCoreApplication::instance()
返回指向应用程序的QCoreApplication实例指针。
[static] bool QCoreApplication::isSetuidAllowed()
如果允许应用程序在UNIX平台运行setuid,则返回true。
[static] QStringList QCoreApplication::libraryPaths()
返回应用程序查找动态库路径列表。
[virtual] bool QCoreApplication::notify(QObject *receiver, QEvent *event)
发送事件给接收者,返回从接收者的事件处理程序返回的值。对于发送到任何线程中任何对象的所有事件,都会调用此函数。
对于某些类型事件,如果接收者不感兴趣(返回false),则事件将传播到接收者的父对象,依次类推至顶级对象。
[static] void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
非阻塞型事件发送,事件发送后立即完成。将事件event添加到事件队列后立即返回。该事件必须在堆上分配,因为发布事件列队将拥有该事件的所有权,并在发布后将其删除。发布事件后,访问该事件是不安全的。当控制器返回到主事件循环时,将使用notify()函数发送队列中存储的所有事件。事件按优先级的从高到低的顺序排序,优先级可以是任何整数值,介于INT_MAX和INT_MIN之间。参考Qt::EventPriority。
[static] void QCoreApplication::processEvent(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
根据指定的标志处理调用线程的所有挂起的事件,直到没有更多事件要处理为止。当程序忙于执行长时间操作时,您可以偶尔调用此函数。
[static] void QCoreApplication::processEvents(QEventLoop::processEventsFlags flags = flags, int maxtime)
重载函数。处理调用线程的挂起事件maxtime毫秒,或者直到没有更多的事件要处理为止,以较短时间为准。
[static slot] void QCoreApplication::quit()
告诉应用程序退出,并返回代码0。相当于调用QCoreApplication::exit(0)。
[static] void QCoreApplication::removeLibraryPath(const QString &path)
移除库列表中path路径。如果path为空,或不存在路径列表中,则库路径列表不会改变。
void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
移除应用程序对象的事件过滤器。如果事件过滤器没有安装,则忽略。
[static] void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)
删除使用postEvent()给receiver对象发送类型为eventType的所有事件。这些事件不是不会被调度,而是会被从队列中删除。一般来说,你不会用到这个函数。若确实使用了这个函数,需要注意,可能会使得receiver对象改变一个或多个不变量。
如果receiver为null,则将删除所有对象的eventType类型事件。如果eventType为0,则删除receiver对象所有事件。
[static] bool QCoreApplication::removeTranslator(QTranslator *translationFile)
移除翻译列表中翻译文件。如果删除成功,则返回true。
[static] bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
使用notify()函数直接给对象receiver发送event事件。并返回事件发送的结果。当事件发送后,事件不会被删除,所以该事件通常在栈上创建。
[static] void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int eventType = 0)
立即调度receiver对象使用QCoreApplication::postEvent()发送的eventType类型所有事件。窗口系统中的事件不由该函数调度,而是由processEvent()调度。如果receiver为空,则向所有对象发送调度eventType事件。如果eentType为0,则调度receiver对象所有事件。
[static] void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
如果on为true,则设置attribute属性,否则清除该属性。
[static] void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
为主线程设置一个事件调度程序。
[static] void QCoreApplication::setLibraryPaths(const QStringList &paths)
设置库加载路径的目录列表。所有现有的路径将被删除。如果QCoreApplication实例被破坏,库路径会被重置为默认路径。
[static] void QCoreApplication::setSetuidAllowed(bool allow)
如果allow为true,则允许应用程序在UNIX平台上运行setuid。
[static] bool QCoreApplication::startingUp()
如果应用程序对象没有创建好,则返回true,否则返回false。
[static] bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)
如果attribute属性被设置,则返回true,否则返回false。
[static] QString QCoreApplication::translate(const char *context, const char *sourceText, const cahr *disambiguation = nullptr, int n = -1)
通过查询已安装得翻译文件,返回sourceText得翻译文本。翻译文件将从最近安装的文件搜索中返回第一个安装的文件。context通常是类名,sourceText是英文文本或简单的标识文本。disambiguation是一个识别字符串,用于在同一上下文的不同角色中使用相同的sourceText。默认情况下,它为nullptr。
非成员函数
void qAddPostRoutine(QtCleanUpFunction ptr)
添加一个将从QCoreApplication析构函数中调用的全局例程。此函数通常用于添加程序范围功能的清理例程。清理的顺序与添加顺序相反。ptr指定的函数不应接收任何参数,也不返回任何值。
static int *global_ptr = 0;
static void cleanup_ptr()
{
delete[] global_ptr;
global_ptr = 0;
}
void init_ptr()
{
global_ptr = new int[100]; //allocate data
qAddPostRoutine(cleanup_ptr);// delete later
}
需要注意,对于应用程序或模块范围的清理,qAddPostRoutine()通常不适用。例如,如果程序被拆分为动态加载模块,那么相关模块可能早在调用QCoreApplication析构函数之前就被卸载了。在这种情况下,可以参考qRemovePostRoutine()。
void qRemovePostRoutine(QtCleanUpFunction ptr)
从QCoreApplication析构函数调用的例程列表中删除ptr指定的清理例程。该例程必须之前通过调用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)
Q_DECLARE_TR_FUNCTIONS(context)
该宏声明了两个函数,tr()和trUtf8()。如果你希望不继承QObject的情况下使用这两个函数,则可以使用这个宏。context一般是类名,但是也可以是其他文本。
class MyMfcView : public CView
{
Q_DECLARE_TR_FUNCTIONS(MyMfcView)
public:
MyMfcView();
...
};