StupidBeauty
Read times:528Posted at:Mon May 23 23:25:15 2011 - no title specified

Qt4.7.0文档翻译:QCoreApplication类参考,QCoreApplication Class Reference

本翻译文章来自于漂亮的笨蛋的勃客: http://stupidbeauty.com/?_=/article/199/Qt4.7.0文档翻译:QCoreApplication类参考,QCoreApplication Class Reference ,英文原文见Qt文档。

详细描述

QCoreApplication类为字符界面的Qt 程序提供一个事件循环。

这个类被非图形界面的程序用来提供它们的事件循环。对于非图形界面的Qt 程序来说,应当有且仅有1个QCoreApplication 对象。对于图形界面的程序来说勒,参见QApplication

QCoreApplication包含咯主要的事件循环,来自操作系统(比如定时器事件和网络事件)和其它来源的事件都是在那里处理和分发(dispatched)的。它还负责程序的初始化和断后工作,还管理差系统级别和程序级别的设置信息。

事件循环和事件处理

事件循环是通过调用exec()来启动的。在耗时较长的操作过程中可以调用processEvents()来让程序继续对用户行为作出响应。

某些Qt 类,比如QString,可以在没有QCoreApplication 对象存在的情况下使用。但是,一般来说,我们建议你在main()函数中尽可能早地创建一个QCoreApplication 或QApplication对象。只有在事件循环退出之后,exit()才会返回;比如调用quit()来实现事件循环的退出。

另外还提供一些静态便利函数。可以通过instance()来获取当前QCoreApplication 对象。可以使用sendEvent()、postEvent()和sendPostedEvents()来发送(sent)或传递(posted)事件。队列中的(Pending)事件可以使用removePostedEvents()来删除,或者使用flush()来刷新(分发出去并且从队列中清除)。

这个类提供咯一个quit()(退出)槽和一个aboutToQuit()(即将退出)信号。

程序和库路径

一个程序拥有一个applicationDirPath()(程序所在的目录路径)和一个applicationFilePath()(程序文件的路径)。库路径(参见QLibrary)可使用libraryPaths()来获取,可使用setLibraryPaths()、addLibraryPath()和removeLibraryPath()来操作。

国际化和翻译

可使用installTranslator()和removeTranslator()来添加或删除翻译文件。程序中的字符串可使用translate()来翻译。QObject::tr()和QObject::trUtf8()函数是使用translate()来实现的。

获取命令行参数

那些被传递到QCoreApplication的构造函数的命令行参数应当使用arguments()函数来访问。注意,用户提供的某些参数可能会被QCoreApplication 处理并且删除。

万一你需要使用argv()函数来获取命令行参数的话,你必须使用QString::fromLocal8Bit()来将它们从本地的系统编码转换过来。

语言区域(Locale)设置

在 Unix/Linux 上,Qt被配置为默认使用系统的语言区域设置。这可能会导致在使用POSIX 函数时产生冲突,比如说,当你在像浮点数(floats)和字符串(strings)这样的数据类型之间转换时会有问题,因为不同语言区域中的表示方法可能不一样。要绕过这个问题的话,就在初始化QApplication或 QCoreApplication 之后马上调用POSIX 函数setlocale(LC_NUMERIC,"C"),以便重置用来将数字格式化成"C"语言区域的语言区域。

参见QApplicationQAbstractEventDispatcherQEventLoop信号灯 Semaphores )示例等待条件 Wait Conditions )示例

成员函数文档

int QCoreApplication::exec () [static]

进入主事件循环,并且等待直到exit()被调用。返回设置给exit()的值(如果是通过quit()来调用exit()的,那麽就是0)。

要启动事件处理过程的话,调用这个函数是必要的。主事件循环从窗口系统接收事件,再将它们分发到程序的部件中。

要让你的程序在空闲状态做动作(idle processing)的话(也就是说,一旦队列中没有事件咯就执行一个特殊函数),就使用一个超时间隔为 0 的QTimer。更先进的空闲动作可以使用processEvents()来实现。

我们建议你将清理代码连接到aboutToQuit()信号,而不是放到你的main()函数中,因为在某些平台上QCoreApplication::exec()可能不会返回。比如,在 Windows 上,当用户注销时,系统会在Qt 关闭所有顶级窗口时终结这个进程。因此,无法确保程序能够有足够的时间来退出事件循环并且还执行main()函数末尾在QCoreApplication::exec()调用之后的代码。

参见quit()、exit()、processEvents()和QApplication::exec()。

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

依据指定的标志(flags)来处理当前线程中位于事件队列中的事件,直到全部处理完毕。当你的程序在做一个很费时间的操作时(比如,复制一个文件),可以不时地调用这个函数。

在事件中,你是位于一个局部循环里,它连续地调用这个函数。如果没有事件循环的话,DeferredDelete事件不会被处理。这会影响到部件的行为,比如说,QToolTip,它依赖DeferredDelete事件才能正常工作。另一个解决方法是在那个局部循环中调用sendPostedEvents()。

调用这个函数只会处理当前线程的事件。

注意:这个函数是线程安全的(thread-safe)。

参见exec()、QTimer、QEventLoop::processEvents()、flush()和sendPostedEvents()。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4