Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1336088
  • 博文数量: 177
  • 博客积分: 3640
  • 博客等级: 中校
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 16:51
文章分类

全部博文(177)

文章存档

2014年(1)

2013年(10)

2012年(3)

2011年(163)

分类: LINUX

2011-05-10 10:46:30

QApplication类管理图形用户界面应用程序的控制流和主要设置。 详情请见……

#include <qapplication.h>

继承了QObject

QXtApplication继承。

所有成员函数的列表。

公有成员公有槽信号静态公有成员相关函数详细描述QApplication类管理图形用户界面应用程序的控制流和主要设置。

它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。

对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。

QApplication对象是可以通过全局变量qApp访问。它的负责的主要范围有:

  • 它使用用户的桌面设置,例如palette()、font()和doubleClickInterval()来初始化应用程序。如果用户改变全局桌面,例如通过一些控制面板,它会对这些属性保持跟踪。

  • 它执行事件处理,也就是说它从低下的窗口系统接收事件并且把它们分派给相关的窗口部件。通过使用sendEvent()和postEvent(),你可以发送你自己的事件到窗口部件。

  • 它分析命令行参数并且根据它们设置内部状态。关于这点的详细情况请参考下面的构造函数文档

  • 它定义了由QStyle对象封装的应用程序的观感。在运行状态下,可以通过setStyle()来改变。

  • 它指定了应用程序如何分配颜色。详细情况请参考setColorSpec()。

  • 它定义了默认文本编码(请参考setDefaultCodec())并且提供了通过translate()用户可见的本地化字符串。

  • 它提供了一些像desktop()和clipboard()这样的魔术般的对象。

  • 它知道应用程序的窗口。你可以使用widgetAt()来询问在一个确定点上存在哪个窗口部件,得到一个topLevelWidgets()(顶级窗口部件)的列表和通过closeAllWindows()来关闭所有窗口,等等。

  • 它管理应用程序的鼠标光标处理,请参考setOverrideCursor()和setGlobalMouseTracking()。

  • 在X窗口系统上,它提供刷新和同步通讯流的函数,请参考flushX()和syncX()。

  • 它提供复杂的对话管理支持。这使得当用户注销时,它可以让应用程序很好地结束,如果无法终止,撤消关闭进程并且甚至为未来的对话保留整个应用程序的状态。详细情况请参考isSessionRestored()、sessionId()、commitData()和saveState()。

应用程序排演实例包含了一个QApplication通常用法的典型完整的main()。

因为QApplication对象做了如此多的初始化,它必须在所有与用户界面相关的其它类被创建之前被创建。

因为它也处理命令行参数,在应用程序中对argv解释和修改之前创建它通常是一个好主意。(注意,也对于X11,setMainWidget()可以根据-geometry选项来改变主窗口部件。为了保持这个功能,你必须在setMainWidget()和它的任何重载之前设置你的默认。)

函数分组
系统设置desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。
事件处理exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。
图形用户界面风格style()、setStyle()、polish()。
颜色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。
文本处理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。
窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。
高级光标处理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。
X窗口系统同步flushX()、syncX()。
对话管理isSessionRestored()、sessionId()、commitData()、saveState()。
线程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。
杂项closeAllWindows()、startingUp()、closingDown()、type()。

非图形用户界面程序:虽然Qt没有为写非图形用户界面程序而优化设计,不创建QApplication也可以使用它的一些类。如果你想在一个非图形用户界面服务器和一个图形用户界面客户端之间共享代码,这点很有用。

也可以参考主窗口和相关类

成员类型文档QApplication::ColorSpec

这个枚举变量定义了应用程序的颜色分配策略:

  • QApplication::NormalColor - 默认的颜色分配策略
  • QApplication::CustomColor - 在X11下和NormalColor一样,在Windows下根据需要为调色板分配颜色
  • QApplication::ManyColor - 使用上千种颜色的应用程序的正确选择

完整细节请参考setColorSpec()。

QApplication::Encoding

这个枚举变量为translate()定义了字符串参数的8位编码。

  • QApplication::DefaultCodec - defaultCodec()的编码(如果没有被设置就是Latin-1)
  • QApplication::UnicodeUTF8 - UTF-8

也可以参考QObject::tr()、QObject::trUtf8()和QString::fromUtf8()。

QApplication::Type

这个枚举变量定义了QApplication的类型:

  • QApplication::Tty - 控制台应用程序
  • QApplication::GuiClient - 图形用户界面客户端应用程序
  • QApplication::GuiServer - 图形用户界面服务器应用程序
成员函数文档QApplication::QApplication ( int & argc, char ** argv )初始化窗口系统并且使用在argv中的argc个命令行参数构造一个应用程序对象。

全局指针qApp指向这个应用程序对象。应该只有一个应用程序对象被创建。

这个应用程序对象必须在任何绘制设备(包括窗口部件、像素映射、位图等等)之前被构造。

注意argcargv也可以被改变。Qt会移除它能够识别的命令行参数。原来的argcargv稍后可以通过qApp->argc()和qApp->argv()来访问。argv()的文档中包含如何处理命令行参数的详细描述。

Qt调试选项(如果Qt被使用被定义的QT_NO_DEBUG标记进行编译,这些选项就是不可用的):

  • -nograb,告诉Qt永远不要捕获鼠标或者键盘。
  • -dograb (只有在X11下),在调试器下运行可能导致和-nograb冲突,使用-dograb来覆盖。
  • -sync (只有在X11下),为了调试切换为同步模式。

更详细的解释请参考调试技术

所有的Qt程序自动支持下面这些命令行选项:

  • -style= style,设置应用程序图形用户界面风格。可能的值有motif、windows和platinum。如果你使用其它风格编译Qt或者有作为插件编译了其它风格,那么它们都可以被用作-style命令行选项。
  • -style style,这个和上面的一样。
  • -session= session,从以前的对话中重新载入应用程序。
  • -session session,这个和上面的一样。

X11版本的Qt也支持传统的X11命令行选项:

  • -display display,设置X显示(默认为$DISPLAY)。
  • -geometry geometry,设置主窗口部件的客户端位置和大小。
  • -fn或者-font font,定义应用程序的字体。这个字体必须使用X逻辑字体描述来北指定。
  • -bg或者-background color,设置默认背景色和应用程序调色板(亮的和暗的阴影将被计算出来)。
  • -fg或者-foreground color,设置默认前景色。
  • -btn或者-button color,设置默认按钮颜色。
  • -name name,设置应用程序名称。
  • -title title,设置应用程序标题。
  • -visual TrueColor,强制应用程序在8位显示上使用真彩图像。
  • -ncols count,如果应用程序使用QApplication::ManyColor颜色规格,在8位显示中限制颜色立方体重分配的颜色。如果count为216,那么一个6x6x6的颜色立方体将被使用(也就是说6级红色,6级绿色和6级蓝色),对于其它值,与2x3x1立方体成比例的立方体将被使用。
  • -cmap,导致应用程序在8位显示上安装一个私有的颜色映射。

也可以参考argc()和argv()。

QApplication::QApplication ( int & argc, char ** argv, bool GUIenabled )构造一个使用argvargc个命令行参数的应用程序对象。如果GUIenabled为真,图形用户界面应用程序被构造,否则非图形用户界面(命令行)应用程序被创建。

对于没有图形用户界面的程序,设置GUIenabled为假可以在没有窗口系统的情况下运行。

在X11下,如果GUIenabled为真,窗口系统被初始化。如果GUIenabled为假,应用程序不连接X服务器。在Windows和Macintosh,现在窗口系统总是被初始化,而不管GUIenabled的值。在Qt未来的版本这也许会改变。

对于线程配置(也就是说当Qt已经被作为线程库建立),应用程序全局互斥量在构造函数中将被锁定并且当使用exec()进入事件循环中时解锁。如果你不调用exec(),你必须明显地对这个互斥量解锁,否则你将会在应用程序退出时得到警告。

下面这个例子显示如何创建在可能情况下使用图形界面的应用程序。

int main( int argc, char **argv ) { #ifdef Q_WS_X11 bool useGUI = getenv( "DISPLAY" ) != 0; #else bool useGUI = TRUE; #endif QApplication app(argc, argv, useGUI); if ( useGUI ) { //开始图形用户界面版本 ... } else { //开始非图形用户界面版本 ... } return app.exec(); } QApplication::QApplication ( int & argc, char ** argv, Type type )构造一个使用argvargc个命令行参数的应用程序对象。

对于Qt/Embedded,在type传递QApplication::GuiServer参数将会使这个应用程序变为服务器(相当于使用-qws参数运行)。

QApplication::QApplication ( Display * dpy, HANDLE visual = 0, HANDLE colormap = 0 )创建一个应用程序,给定一个已经打开显示的dpy。如果visualcolormap非零,应用程序将使用它们作为默认的Visual和Colormap上下文。

这个只在X11上有效。

QApplication::QApplication ( Display * dpy, int argc, char ** argv, HANDLE visual = 0, HANDLE colormap = 0 )创建使用argvargc个命令行参数的一个应用程序,给定一个已经打开显示的dpy。如果visualcolormap非零,应用程序将使用它们作为默认的Visual和Colormap上下文

这个只在X11上有效。

QApplication::~QApplication () [虚]清空由这个应用程序分配的任何窗口系统资源。设置全局变量qApp为0。void QApplication::aboutToQuit () [信号]

当应用程序要退出主事件循环时,这个信号被发射。这也许发生在应用程序中调用quit()之后,或者当用户关闭整个桌面对话时。

如果你的应用程序在清空的最后一刻要做些什么,这个信号特别重要。注意在这种状态下没有任何用户交互。

也可以参考quit()。

QWidget * QApplication::activeModalWidget () [静态]返回激活的模式窗口部件。

模式对话框是特殊的顶级窗口部件,它是QDialog的子类,在构造函数中把模式参数设置为真。用户只有在关闭了模式窗口部件之后才能继续这个程序的其它部分。

模式窗口部件被组织在一个栈中。这个函数返回栈顶的激活窗口部件。

也可以参考activePopupWidget()和topLevelWidgets()。

QWidget * QApplication::activePopupWidget () [静态]返回激活弹出窗口部件。

弹出窗口部件是特殊的顶级窗口部件,它设置了窗口部件标记WType_Popup,例如QPopupMenu窗口部件。当应用程序打开一个弹出窗口部件,所有的事件都被发送给弹出窗口部件。在弹出窗口部件被关闭之前,普通窗口部件和模式对话框都不能被访问。

当弹出窗口部件被显示时,只有其它弹出窗口部件可以被打开。弹出窗口部件被组织在一个栈中。这个函数返回栈顶的弹出窗口部件。

也可以参考activeModalWidget()和topLevelWidgets()。

QWidget * QApplication::activeWindow () const

返回拥有键盘输入焦点的应用程序顶级窗口,或者如果没有应用程序窗口拥有焦点,返回0。注意尽管可能没有focusWidget(),仍然有可能activeWindow(),例如如果在窗口中没有窗口部件接收键盘事件。

也可以参考QWidget::setFocus()、QWidget::focusfocusWidget()。

实例:network/mail/smtp.cpp

void QApplication::addLibraryPath ( const QString & path ) [静态]把path添加到库路径列表的末尾。如果path为空或者已经在路径列表中,路径列表不会被改变。默认路径列表包含一个单一的条目$QTDIR/plugins。

也可以参考removeLibraryPath()、libraryPaths()和setLibraryPaths()。

QWidgetList * QApplication::allWidgets () [静态]返回应用程序中所有窗口部件的列表。

这个列表必须使用new来被创建并且必须被调用者删除。

如果没有窗口部件,这个列表为空(QPtrList::isEmpty())。

注意一些窗口部件也许被隐藏。

更新所有窗口部件的实例:

QWidgetList *list = QApplication::allWidgets(); QWidgetListIt it( *list ); // 遍历窗口部件 QWidget * w; while ( (w=it.current()) != 0 ) { // 对于每一个窗口部件…… ++it; w->update(); } delete list; // 删除这个列表,不是这个窗口部件

QWidgetList类在qwidgetlist.h头文件中被定义。

警告:一旦你用完了这个列表,就删除它。列表中的窗口部件也许会在任何时候被其它删除。

也可以参考topLevelWidgets()、QWidget::visibleQPtrList::isEmpty()。

int QApplication::argc () const

返回命令行参数的数量。

argv()的文档描述了如何处理命令行参数。

也可以参考argv()和QApplication::QApplication()。

实例:chart/main.cppscribble/scribble.cpp

char ** QApplication::argv () const

返回命令行参数矢量。

argv()[0]是程序名称,argv()[1]是第一个参数并且argv()[argc()-1]是最后一个参数。

QApplication对象是通过从main()函数传递的argcargv被构造的。一些参数被作为Qt选项识别并且从参数矢量中移除。例如,X11版本的Qt知道-display、-font和其它一些选项。

实例:

// showargs.cpp - 在列表框中显示程序参数 #include <qapplication.h> #include <qlistbox.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); QListBox b; a.setMainWidget( &b ); for ( int i = 0; i < a.argc(); i++ ) // a.argc() == argc b.insertItem( a.argv()[i] ); // a.argv()[i] == argv[i] b.show(); return a.exec(); }

如果你在X11下运行showargs -display unix:0 -font 9x15bold hello world,列表框中包含三个字符串“showargs”、“hello”和“world”。

也可以参考argc()和QApplication::QApplication()。

实例:chart/main.cppscribble/scribble.cpp

void QApplication::beep () [静态]使铃发声,使用默认音量和声音。QClipboard * QApplication::clipboard () [静态]返回应用程序全局剪贴板的指针。

实例:showimg/showimg.cpp

void QApplication::closeAllWindows () [槽]关闭所有顶级窗口。

这个函数对于有很多顶级窗口部件的应用程序相当有用。例如,它可以被和文件菜单中的“Quit”条目连接,正如下面的代码实例:

// “Quit”菜单条目应该试图关闭所有窗口 QPopupMenu* file = new QPopupMenu( this ); file->insertItem( "&Quit", qApp, SLOT(closeAllWindows()), CTRL+Key_Q ); // 当最后一个窗口被关闭,应用程序应该退出 connect( qApp, SIGNAL( lastWindowClosed() ), qApp, SLOT( quit() ) );

窗口是被按随机顺序关闭的,直到一个窗口不接受关闭事件。

也可以参考QWidget::close()、QWidget::closeEvent()、lastWindowClosed()、quit()、topLevelWidgets()和QWidget::isTopLevel

实例:action/application.cppapplication/application.cpphelpviewer/helpwindow.cppmdi/application.cppqwerty/qwerty.cpp

bool QApplication::closingDown () [静态]如果应用程序对象正在被销毁,返回真,否则返回假。

也可以参考startingUp()。

int QApplication::colorSpec () [静态]返回颜色规格。

也可以参考QApplication::setColorSpec()。

实例:showimg/showimg.cpp

void QApplication::commitData ( QSessionManager & sm ) [虚]

这个函数处理对话管理。当QSessionManager想让应用程序提交它的所有数据时,它被调用。

通常这意味着在得到用户的许可之后保存所有打开的文件。此外你可能想提供让用户可以撤销这个关闭的选择。

注意你不应该在这个函数中退出这个应用程序。相反,对话管理器在这之后也许会,也许不会这样做,依赖上下文。

警告:在这个函数中,不能有任何用户交互,除非你请求对话管理器sm明确的允许。详细情况和使用实例请参考QSessionManager::allowsInteraction()和QSessionManager::allowsErrorInteraction()。

默认实现请求交互并且发送一个关闭事件给所有可视的顶级窗口部件。如果任何一个事件被拒绝,那么关闭被撤销。

也可以参考isSessionRestored()、sessionId()和saveState()。

int QApplication::cursorFlashTime () [静态]返回文本关标闪烁(闪亮)的时间,以毫秒为单位。闪烁时间是显示、转化和恢复脱字符显示所使用的时间。

在X11上的默认值是1000毫秒。在Windows上,使用控制面板的值。

窗口部件不应该存储这个值,因为它可能在任何时候被用户改变全局桌面设置而改变。

也可以参考setCursorFlashTime()。

QTextCodec * QApplication::defaultCodec () const返回默认的编解码器(请参考setDefaultCodec())。默认返回0(没有编解码器)。QDesktopWidget * QApplication::desktop () [静态]返回桌面窗口部件(也调用根窗口)。

桌面窗口部件对于获得屏幕大小很有用。在桌面上绘制也是可能的。我们建议不要假设可以在桌面上绘制,因为它不能在所有的操作系统上工作。

QDesktopWidget *d = QApplication::desktop(); int w = d->width(); // 返回桌面宽度 int h = d->height(); // 返回桌面高度

实例:canvas/main.cppdesktop/desktop.cpphelpviewer/main.cppi18n/main.cppqmag/qmag.cppqwerty/main.cppscribble/main.cpp

bool QApplication::desktopSettingsAware () [静态]返回由setDesktopSettingsAware()设置的值,默认返回真。

也可以参考setDesktopSettingsAware()。

int QApplication::doubleClickInterval () [静态]返回双击的最大持续时间。

在X11上默认值为400毫秒。在Windows上,使用控制面板的值。

也可以参考setDoubleClickInterval()。

int QApplication::enter_loop ()这个函数进入主事件循环(递归地)。除非你真的直到你正在做什么,否则请不要调用它。

也可以参考exit_loop()和loopLevel()。

int QApplication::exec ()进入主事件循环并且等待,直到exit()被调用或者主窗口部件被销毁,并且返回值被设置为exit()(如果通过quit(),exit()被调用,为0)。

需要调用这个函数来开始事件处理。主事件循环从窗口系统中接收事件并且把它们分派给应用程序窗口部件。

通常来说,在调用exec()之前,没有用户交互可以发生。作为一个特例,像QMessageBox这样的模式对话框可以在调用exec()之前使用,因为模式对话框调用exec()来开始本地事件循环。

为了使你的应用程序执行空闲处理,例如,只要没有未处理地事件,执行一个特殊的函数,使用QTimer,0超时。更高级的空闲处理方案可以使用processEvents()来完成。

也可以参考quit()、exit()、processEvents()和setMainWidget()。

实例:biff/main.cppchart/main.cppfonts/simple-qfont-demo/simple-qfont-demo.cpplife/main.cppt1/main.cppt4/main.cppxml/outliner/main.cpp

void QApplication::exit ( int retcode = 0 ) [静态]告诉应用程序退出,伴随一个返回代码。

在这个函数被调用之后,应用程序离开主事件循环并且从exec()调用之后返回。exec()函数返回retcode

根据习惯,为0的retcode意味着成功,并且任何非零的值意味着错误。

注意与同名的C库函数不同,这个函数返回到调用者——它的事件处理结束。

也可以参考quit()和exec()。

实例:chart/chartform.cpppicture/picture.cpp

void QApplication::exit_loop ()这个函数从到主事件循环的递归调用中退出。不要调用它,除非你是一个专家。

也可以参考enter_loop()和loopLevel()。

void QApplication::flush () [静态]刷新窗口系统指定事件队列。

如果在异步的窗口系统,例如X11,或者双缓存的窗口系统,例如Mac OS X的不返回事件循环的循环中正在做图形变化,并且你想立即显现这些变化(比如,Splash Screen),请调用这个函数。

也可以参考flushX()、sendPostedEvents()和QPainter::flush()。

void QApplication::flushX () [静态]在X11实现中刷新X事件队列。这通常会立即返回。在其它平台上不会做任何事。

也可以参考syncX()。

实例:xform/xform.cpp

QWidget * QApplication::focusWidget () const

返回拥有键盘输入焦点的应用程序窗口部件,或者在这个应用程序中没有窗口部件拥有焦点,返回0。

也可以参考QWidget::setFocus()、QWidget::focusactiveWindow()。

QFont QApplication::font ( const QWidget * w = 0 ) [静态]返回窗口部件w的默认字体,或者如果w为0,返回默认应用程序字体。

也可以参考setFont()、fontMetrics()和QWidget::font

实例:qfd/fontdisplayer.cppthemes/metal.cppthemes/themes.cpp

QFontMetrics QApplication::fontMetrics () [静态]返回应用程序字体的显示(屏幕)字体规格。

也可以参考font()、setFont()、QWidget::fontMetrics()和QPainter::fontMetrics()。

QSize QApplication::globalStrut () [静态]

返回应用程序的全局strut。

strut是任何用户可以交互的图形交互界面元素的最小维数的大小对象。例如,没有按钮应该被重新定义大小小于全局strut大小。

也可以参考setGlobalStrut()。

void QApplication::guiThreadAwake () [信号]

当图形用户界面线程要处理一个事件循环的周期,这个信号被发射。

也可以参考wakeUpGuiThread()。

bool QApplication::hasGlobalMouseTracking () [静态]

如果全局鼠标跟踪生效,返回真,否则返回假。

也可以参考setGlobalMouseTracking()。

bool QApplication::hasPendingEvents ()如果有未处理的事件,这个函数返回真,否则返回假。未处理的事件可以是来自于窗口系统,也可以是使用QApplication::postEvent()发送的事件。int QApplication::horizontalAlignment ( int align ) [静态]

去掉垂直对齐标记并且根据使用的语言把AlignAuto的对齐方式align转换为AlignLeft或者AlignRight。其它水平对齐标记不被改变而留下。

void QApplication::installTranslator ( QTranslator * mf )添加消息文件mf到翻译所用的消息文件列表。

可以安装多种消息文件。翻译会在最后安装的消息文件中搜索,然后是紧接着最后的,并且继续,一直到最先安装的。一旦找到匹配的翻译,搜索就停止。

也可以参考removeTranslator()、translate()和QTranslator::load()。

实例:i18n/main.cpp

bool QApplication::isEffectEnabled ( Qt::UIEffect effect ) [静态]如果effect生效,返回真,否则返回假。

默认,Qt将视图使用桌面设置。调用setDesktopSettingsAware(FALSE)可以防止这一点。

也可以参考setEffectEnabled()和Qt::UIEffect

bool QApplication::isSessionRestored () const

如果应用程序已经从以前的对方中恢复,返回真,否则返回假。

也可以参考sessionId()、commitData()和saveState()。

void QApplication::lastWindowClosed () [信号]

当用户关闭最后一个顶级窗口时,这个信号被发射。

当你的应用程序有很多顶级窗口部件,而没有主窗口部件时,这个信号很有用。你可以把它和quit()槽连接起来。

为了方便,对于短暂的顶级窗口部件,例如弹出菜单和对话框,这个信号被发射。

也可以参考mainWidget()、topLevelWidgets()、QWidget::isTopLevelQWidget::close()。

实例:action/main.cppaddressbook/main.cppchart/main.cpphelpviewer/main.cppqwerty/main.cppshowimg/main.cpp

QStringList QApplication::libraryPaths () [静态]返回当动态载入库的时候,应用程序将搜索的路径列表。如果没有路径被设置,$QTDIR/plugins将作为唯一的条目被返回。

如果你想遍历这个列表,你应该遍历一个复制,例如:

QStringList list = app.libraryPaths(); QStringList::Iterator it = list.begin(); while( it != list.end() ) { myProcessing( *it ); ++it; }

关于如何使用库路径的详细情况请参考插件文档

也可以参考setLibraryPaths()、addLibraryPath()、removeLibraryPath()和QLibrary

void QApplication::lock ()

锁住Qt库互斥量。如果另外一个线程已经锁住这个互斥量,那么这个调用线程将会阻塞,直到其它线程对这个互斥量解锁。

也可以参考unlock()、locked()和Qt中的线程支持

bool QApplication::locked ()

如果Qt库互斥量被不同的线程锁住,返回真,否则返回假。

警告:由于在被支持的平台上,递归互斥量的实现不同,在以前锁住互斥量的同一个线程中调用这个函数将会给出不确定的结果。

也可以参考lock()、unlock()和Qt中的线程支持

int QApplication::loopLevel () const返回当前循环水平。

也可以参考enter_loop()和exit_loop()。

bool QApplication::macEventFilter ( EventRef ) [虚]这个虚函数只在Macintosh下被实现。

如果你创建一个继承QApplication并且重新实现这个函数的应用程序,你可以直接访问从Mac OS接收的所有Carbon事件。

如果你想停止正在处理的事件,返回真。对于普通事件分派,返回假。

QWidget * QApplication::mainWidget () const

返回主应用程序窗口部件,如果没有主窗口部件,返回0。

也可以参考setMainWidget()。

bool QApplication::notify ( QObject * receiver, QEvent * e ) [虚]把事件e发送给receiverreceiver->event(e)。返回接收者的事件处理器返回值。

对于确定类型的事件(例如鼠标和键盘事件),如果接收者对这个事件没有兴趣(也就是说它返回假),事件将被传播给接收者的父对象一直到顶级对象。

这里有事件被处理的五种不同方法,重新实现这个函数是其中的一个。所有这五种途径如下:

  1. 重新实现这个函数。这是一个非常强大,提供了完整控制,但只能是qApp的子类。

  2. 在qApp上安装事件过滤器。这样的事件过滤器可以为所有窗口部件处理所有的事件,所以它和重新实现notify()一样强大;此外,可以有超过一个的应用程序全局事件过滤器。全局事件过滤器甚至可以看到失效的窗口部件的鼠标事件,并且如果全局鼠标跟踪生效,它可以见到所有窗口部件的鼠标移动事件。

  3. 重新实现QObject::event()(就像QWidget做的那样)。如果你这样做来得到Tab键按下,并且你会在任何窗口部件特定的事件过滤器之前看到这个事件。

  4. 在一个对象中安装事件过滤器。这样的事件过滤器可以得到除了Tab和Shift-Tab键按下之外的所有事件。

  5. 重新实现paintEvent()、mousePressEvent()和其它。这是最普通、最容易并且最不强大的方式。

也可以参考QObject::event()和installEventFilter()。

QCursor * QApplication::overrideCursor () [静态]

返回激活的应用程序强制光标。

如果没有应用程序关标被指定(也就是说内部光标栈为空),这个函数返回0。

也可以参考setOverrideCursor()和restoreOverrideCursor()。

QPalette QApplication::palette ( const QWidget * w = 0 ) [静态]返回默认应用程序调色板的指针。这个一直是应用程序的调色板,也就是说返回的指针被保证为非零。

如果被传递的窗口部件w,返回这个窗口部件的默认调色板。这个可能是,也可能不是应用程序调色板。在绝大多数情况下,普通类型的窗口部件没有特殊调色板,但是一个需要注意的例外是在Windows下的弹出菜单,如果用户在显示设置中为菜单定义了特定背景色。

也可以参考setPalette()和QWidget::palette

实例:desktop/desktop.cppthemes/metal.cppthemes/wood.cpp

void QApplication::polish ( QWidget * w ) [虚]在窗口部件w被显示之前,初始化它的外观。

通常当窗口部件被抛光时,它们会自动调用这个函数。它也可以被用来做窗口部件的基于风格的主要定制。

注意你不会被QWidget的公有函数限制。相反,基于像QObject::className()这些元信息,你可以对任何种类的窗口部件进行定制。

也可以参考QStyle::polish()、QWidget::polish()、setPalette()和setFont()。

void QApplication::postEvent ( QObject * receiver, QEvent * event ) [静态]把事件event添加为对象receiver的接收对象,把它添加到事件队列中并且立即返回。

这个时间必须在堆中被分配,因为递送事件队列将会得到事件的所有权并且一旦它被递送就删除它。

当控制返回主事件循环,存储在队列中的所有事件将被使用notify()函数发送。

也可以参考sendEvent()、QThread::postEvent()和notify()。

void QApplication::processEvents ()处理未处理的事件,在3秒内或者直到没有没有更多的事件要处理,看哪一个更短。

偶尔当你的程序很忙来处理一个长期操作(例如,复制文件),你可以调用这个函数。

也可以参考exec()和QTimer

实例:fileiconview/qfileiconview.cpp

void QApplication::processEvents ( int maxtime )这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

处理未处理的事件,在maxtime毫秒内或者直到没有没有更多的事件要处理,看哪一个更短。

偶尔当你的程序很忙来处理一个长期操作(例如,复制文件),你可以调用这个函数。

也可以参考exec()和QTimer

void QApplication::processOneEvent ()等待一个事件的发生,处理它,然后返回。

这个函数对于使Qt能够适应事件处理必须移植到已经存在的程序循环中很有用处。

在新的应用程序中使用这个函数可能意味着设计的问题。

也可以参考processEvents()、exec()和QTimer

void QApplication::quit () [槽]告诉应用程序退出,并且返回代码为0(成功)。相当于调用QApplication::exit( 0 )。

lastWindowClosed()信号和quit()连接起来是很普通的,并且你也可以经常把比如QButton::clicked()或者QActionQPopupMenuQMenuBar中的信号和它连接起来。

实例:

QPushButton *quitButton = new QPushButton( "Quit" ); connect( quitButton, SIGNAL(clicked()), qApp, SLOT(quit()) );

也可以参考exit()、aboutToQuit()、lastWindowClosed()和QAction

实例:addressbook/main.cpphelpviewer/main.cppqwerty/main.cppshowimg/main.cppt2/main.cppt4/main.cppt6/main.cpp

QWSDecoration & QApplication::qwsDecoration () [静态]返回装饰窗口所使用的QWSDecoration

这个方法是不可移植的。它在Qt/Embedded中有效。

也可以参考QWSDecoration

bool QApplication::qwsEventFilter ( QWSEvent * ) [虚]这个虚函数只在Qt/Embedded下实现。

如果你创建一个继承QApplication并且重新实现这个函数的一个应用程序,你可以直接处理从QWS(Q窗口系统)进程接收的说有QWS事件。

如果你想停止要处理的事件,返回真。对于普通事件分派,返回假。

void QApplication::qwsSetCustomColors ( QRgb * colorTable, int start, int numColors )设置Qt/Embedded定制颜色表。

Qt/Embedded在8位显示时分配一个标准的216颜色立方体。它保留了40个颜色可以用来在任何客户端连接之前由QWS主进程设置一个自定义颜色表。

colorTable是任何最多为40的自定义颜色数组。start是开始索引(0-39),并且numColors是要设置的颜色数量(1-40)。

这个方法是不可移植的。它在Qt/Embedded有效。

void QApplication::qwsSetDecoration ( QWSDecoration * d ) [静态]设置用来装饰Qt/Embedded窗口的QWSDecoration的继承类为d

这个方法是不可移植的。它在Qt/Embedded有效。

也可以参考QWSDecoration

void QApplication::removeLibraryPath ( const QString & path ) [静态]从库路径列表中移除path。如果path为空或者它不在列表中,列表不被改变。

也可以参考addLibraryPath()、libraryPaths()和setLibraryPaths()。

void QApplication::removePostedEvents ( QObject * receiver ) [静态]移除所有使用postEvent()递送给receiver的事件。

这些事件不被分派,相反它们会从队列中被移除。你应该永远不需要调用这个函数。如果你调用了,要直到杀掉事件可能导致receiver破坏一个或多个变量。

void QApplication::removeTranslator ( QTranslator * mf )从这个应用程序所使用的消息文件的列表中移除消息文件mf。(它不会从文件系统中删除这个消息文件。)

也可以参考installTranslator()、translate()和QObject::tr()。

实例:i18n/main.cpp

void QApplication::restoreOverrideCursor () [静态]撤销最近一次的setOverrideCursor()。

如果setOverrideCursor()已经被调用两次,调用restoreOverrideCursor()会激活第一个光标设置。第二次调用这个函数会恢复初始窗口部件的光标。

也可以参考setOverrideCursor()和overrideCursor()。

实例:showimg/showimg.cpp

bool QApplication::reverseLayout () [静态]如果所有的对话框和窗口部件都将会被按镜像的方式被放置(从右到左),返回真。如果是按从左到右的方式,返回假。

也可以参考setReverseLayout()。

void QApplication::saveState ( QSessionManager & sm ) [虚]

这个函数处理对话管理。当对话管理器想让应用程序为未来的对话保存它的状态时,它被调用。

例如,文本编辑器将会创建一个包含编辑缓存的当前内容的临时文件,光标的位置和当前编辑对话的其它特征。

注意你不应该在这个函数中退出这个应用程序。相反,对话管理器在这之后也许会,也许不会这样做,依赖上下文。此外,绝大多数对话管理器将会在应用程序已经被开始之后立即请求一个状态保存。这允许对话管理器来知道应用程序的重启策略。

警告:在这个函数中,不能有任何用户交互,除非你请求对话管理器sm明确的允许。详细情况和使用实例请参考QSessionManager::allowsInteraction()和QSessionManager::allowsErrorInteraction()。

也可以参考isSessionRestored()、sessionId()和commitData()。

bool QApplication::sendEvent ( QObject * receiver, QEvent * event ) [静态]

使用notify()函数直接发送事件event给接受者receiver。返回由事件处理器返回的值。

这个事件在它被发送时,不能被删除。通常的访问方式是在栈中创建这个事件,例如:

QMouseEvent me( QEvent::MouseButtonPress, pos, 0, 0 ); QApplication::sendEvent( mainWindow, &me ); 如果你在堆中创建这个事件,你就必须删除它。

也可以参考postEvent()和notify()。

实例:popup/popup.cpp

void QApplication::sendPostedEvents ( QObject * receiver, int event_type ) [静态]立即分派由QApplication::postEvent()以前已经排队的并且是发给对象receiver,事件类型是event_type的所有事件。

注意来自窗口系统的事件不能被这个函数分派,但是可以用processEvents()。

void QApplication::sendPostedEvents () [静态]分派所有递送事件,也就是清空事件队列。这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。QString QApplication::sessionId () const

返回当前对话的标识符。

如果应用程序已经从一个较早的对话中恢复,这个标识符就和那个先前的对话一样。

对话标识符已经被保证对于不同的应用程序和同一个应用程序的不同实例都是唯一的。

也可以参考isSessionRestored()、commitData()和saveState()。

void QApplication::setColorSpec ( int spec ) [静态]设置应用程序的颜色策略为spec

颜色策略控制着当在一个显示颜色总数有限制的情况下运行应用程序如何分配颜色,例如8位/256色显示。

颜色策略必须在你创建QApplication对象之前设置。

选项有:

  • QApplication::NormalColor。这是默认颜色分配策略。如果你的应用程序使用按钮、菜单、文本和少量颜色的像素映射,请使用这个选项。在这个选项中,应用程序使用系统全局颜色。这对于X11下的绝大多数应用程序都工作得很好,但是在Windows机器上,它也许会导致非标准颜色的抖动。
  • QApplication::CustomColor。如果你的应用程序需要少量的自定义颜色,请使用这个选项。在X11下,这个选项和NormalColor一样。在Windows下,Qt创建一个Windows调色板并且在根据需要在上面分配颜色。
  • QApplication::ManyColor。如果你的应用程序使用非常大量的颜色(例如,它需要几千种颜色),请使用这个选项。在X11下,效果是:
    • 对于最多256色真彩色视的256色显示,默认视被显示,并且颜色被分配到一个颜色立方体重。颜色立方体是6*6*6(216色)“网页调色板”*,但是颜色的数量可以通过-ncols选项改变。用户可以通过-visual选项强制应用程序使用真彩色视。
    • 对于超过256色的真彩色视的256色显示,就是用这个视。例如,Silicon Graphics的X服务器具有这个特征。它们提供8位视作为默认,但是可以当请求的时候可以递送真彩色。
    在Windows下,Qt创建一个Windows调色板并且用一个颜色立方体填充它。

要知道CustomColor和ManyColor选择也许会导致颜色映射闪烁:当背景窗口将看起来不够吸引人的时候,前景应用程序得到(绝大多数)可用的颜色。

实例:

int main( int argc, char **argv ) { QApplication::setColorSpec( QApplication::ManyColor ); QApplication a( argc, argv ); ... }

QColor提供对于控制颜色分配合释放某一种颜色的更多功能。详细信息请参考QColor::enterAllocContext()。

为了检查你以什么模式结束,当QApplication对象存在的时候,调用QColor::numBitPlanes()。一个大于8的值(通常是16、24或32)意味着真彩色。

* 0x00, 0x33, 0x66, 0x99, 0xCC, or 0xFF. * Qt使用的颜色立方体有216色,它的红、绿和蓝组成部分总是下面的值之一:0x00、0x33、0x66、0x99、0xCC或0xFF。

也可以参考colorSpec()、QColor::numBitPlanes()和QColor::enterAllocContext()。

实例:helpviewer/main.cppshowimg/main.cppt9/main.cpptetrix/tetrix.cppthemes/main.cpp

void QApplication::setCursorFlashTime ( int msecs ) [静态]设置文本光标闪烁(闪亮)时间为msecs毫秒。闪烁时间是显示、转化和恢复脱字符显示所使用的时间。通常文本光标是显示msecs/2毫秒,然后隐藏msecs/2毫秒,但是这可能会变化。

注意在Microsoft Windows上,调用这个函数会设置所有窗口的光标闪烁时间。

也可以参考cursorFlashTime()。

void QApplication::setDefaultCodec ( QTextCodec * codec )设置应用程序的默认编解码器为codec

如果程序中的文字引用文本不是Latin1编码,这个函数可以用来设置合适的编码。例如,韩国程序员开发的软件在程序中对所有文本可以使用eucKR,这种情况下,main()函数可能看起来像这样:

int main(int argc, char** argv) { QApplication app(argc, argv); ... install any additional codecs ... app.setDefaultCodec( QTextCodec::codecForName("eucKR") ); ... }

注意,这不是用户来选择编码的方式。例如,把一个包含英语字符串的应用程序转换为韩语,所需要做的一切就是对于所有的英语字符串通过tr()传递并且载入翻译文件。有关国际化的详细情况,请参考Qt国际化文档

注意也有一些Qt内置类为不同的字符串调用tr()。这些字符串使用英语,所以对于完整的翻译,编解码器将被这些字符串需要。

void QApplication::setDesktopSettingsAware ( bool on ) [静态]默认情况下,Qt将试图使用底下的窗口系统的桌面设置中当前标准颜色、字体等等并且对于所有相关窗口部件使用它们。这种行为可以通过把on设置为假,调用这个函数来关闭。

This static function must be called before creating the QApplication object, like this:

int main( int argc, char** argv ) { QApplication::setDesktopSettingsAware( FALSE ); // 我知道什么比用户的更好 QApplication myApp( argc, argv ); // 使用默认字体&颜色 ... }

也可以参考desktopSettingsAware()。

void QApplication::setDoubleClickInterval ( int ms ) [静态]设置区别一个双击和两次单击的时间限度为ms毫秒。

注意在Microsoft Windows上,调用这个函数会设置所有窗口的双击间隔。

也可以参考doubleClickInterval()。

void QApplication::setEffectEnabled ( Qt::UIEffect effect, bool enable = TRUE ) [静态]如果enable为真,使用户界面效果effect生效,否则这个效果将不被使用。

也可以参考isEffectEnabled()、Qt::UIEffectsetDesktopSettingsAware()。

void QApplication::setFont ( const QFont & font, bool informWidgets = FALSE, const char * className = 0 ) [静态]改变应用程序默认字体为font。如果informWidgets为真,那么存在的窗口部件将会被通知有关这个变化并且也许会根据新的应用程序设置来调整它们自己。如果informWidgets为假,改变只对新创建的窗口部件生效。如果className被传递,那么改变只对继承className的类适用(由QObject::inherits()报告的)。

当应用程序启动时,默认字体依赖于窗口系统。它非常依赖于窗口系统的版本和本地设置。这个函数让我们不顾默认字体,但是这种不顾也许是一个坏主意,因为,例如,一些本地设置需要支持它的一些特殊字符需要特大字体。

也可以参考font()、fontMetrics()和QWidget::font

实例:desktop/desktop.cppqfd/qfd.cppshowimg/main.cppthemes/metal.cppthemes/themes.cpp

void QApplication::setGlobalMouseTracking ( bool enable ) [静态]如果enable为真,使全局鼠标跟踪生效,或者如果enable为假,使它失效。

使全局鼠标跟踪生效将使窗口部件时间过滤器或者应用程序事件过滤器能够获得所有的鼠标移动事件,尽管当没有按键被按下的时候。这对于特殊图形用户界面元件,比如工具提示,是很有用的。

全局鼠标跟踪不会影响窗口部件和它们的mouseMoveEvent()。对于一个要在按键不被按下时得到鼠标移动事件的窗口部件,它必须做QWidget::setMouseTracking(TRUE)。

这个函数使用内部计数器。每一个setGlobalMouseTracking(TRUE)都必须有一个相对应的setGlobalMouseTracking(FALSE):

// 在这点,全局鼠标跟踪是关闭的 QApplication::setGlobalMouseTracking( TRUE ); QApplication::setGlobalMouseTracking( TRUE ); QApplication::setGlobalMouseTracking( FALSE ); // 在这点,它仍然是打开的 QApplication::setGlobalMouseTracking( FALSE ); // 但是现在它是关的

也可以参考hasGlobalMouseTracking()和QWidget::mouseTracking

void QApplication::setGlobalStrut ( const QSize & strut ) [静态]设置应用程序全局strut为strut

strut是任何用户可以交互的图形交互界面元素的最小维数的大小对象。例如,没有按钮应该被重新定义大小小于全局strut大小。

当重新实现用于在触摸屏或者类似输入输出设备的图形用户界面控制时,strut的大小应该被考虑。

实例:

QSize& WidgetClass::sizeHint() const { return QSize( 80, 25 ).expandedTo( QApplication::globalStrut() ); }

也可以参考globalStrut()。

void QApplication::setLibraryPaths ( const QStringList & paths ) [静态]设置当载入库的时候搜索的目录列表为paths。如果paths为空,搜索列表不会被改变,否则所有的存在的路径将被删除并且路径列表将由paths中给定的路径组成。

也可以参考libraryPaths()、addLibraryPath()、removeLibraryPath()和QLibrary

void QApplication::setMainWidget ( QWidget * mainWidget ) [虚]设置应用程序的主窗口部件为mainWidget

主窗口部件的绝大部分责任和任何其它窗口部件一样,除了如果它被删除,应用程序就退出。

你也可以不需要主窗口部件,把lastWindowClosed()连接到quit()是一个替换方法。

对于X11,这个函数也可以根据-geometry命令行参数来移动和改变主窗口部件的大小,所以你应该在调用setMainWidget()之前设置默认几何形状(使用QWidget::setGeometry())。

也可以参考mainWidget()、exec()和quit()。

实例:canvas/main.cppchart/main.cppfonts/simple-qfont-demo/simple-qfont-demo.cpplife/main.cppt1/main.cppt4/main.cppxml/outliner/main.cpp

void QApplication::setOverrideCursor ( const QCursor & cursor, bool replace = FALSE ) [静态]设置应用程序强制光标为cursor

应用程序强制光标是为了显示应用程序是在特定状态下,例如在一个操作期间也许会占用一些时间。

这个光标将在所有应用程序的窗口部件中被显示,直到restoreOverrideCursor()或者另一个setOverrideCursor()被调用。

应用程序光标被存储到内部栈中。setOverrideCursor()把光标压到栈中,并且restoreOverrideCursor()把激活的光标从栈中弹出。每一个setOverrideCursor()都必须最后有一个对应的restoreOverrideCursor()跟着,否则栈将永远不会被清空。

如果replace为真,新的光标将替换最近一个强制光标(栈将保持它的深度)。如果replace为假,新的光标将被要到栈顶。

实例:

QApplication::setOverrideCursor( Qt::WaitCursor ); calculateHugeMandelbrot(); // 消耗时间…… QApplication::restoreOverrideCursor();

也可以参考overrideCursor()、restoreOverrideCursor()和QWidget::cursor

实例:showimg/showimg.cpp

void QApplication::setPalette ( const QPalette & palette, bool informWidgets = FALSE, const char * className = 0 ) [静态]改变应用程序默认调色板为palette。如果informWidgets为真,那么存在的窗口部件将会被通知有关这个变化并且也许会根据新的应用程序设置来调整它们自己。如果informWidgets为假,改变只对新创建的窗口部件生效。

如果className被传递,那么改变只对继承className的类适用(由QObject::inherits()报告的)。如果className为0,变化将影响所有窗口部件,这样会强制覆盖以前任何类的特定调色板。

这个调色板会根据QStyle::polish()中当前的图形用户界面风格而被改变。

也可以参考QWidget::palettepalette()和QStyle::polish()。

实例:i18n/main.cppthemes/metal.cppthemes/themes.cppthemes/wood.cpp

void QApplication::setReverseLayout ( bool b ) [静态]如果b为真,所有的对话框和窗口部件可以按镜像方式布置,这是阿拉伯语和希伯来语等从右到左的语言需要的。如果b为假,对话框和窗口部件被按从左到右布置。

也可以参考reverseLayout()。

void QApplication::setStartDragDistance ( int l ) [静态]设置拖动开始之后的距离为l像素。

也可以参考startDragDistance()。

void QApplication::setStartDragTime ( int ms ) [静态]设置拖动开始之后的时间为ms毫秒。

也可以参考startDragTime()。

void QApplication::setStyle ( QStyle * style ) [静态]设置应用程序的图形用户界面风格为style。风格对象的所有权被移交给QApplication,所以当应用程序退出时或者当新的风格被设置时QApplication会删除这个风格对象。

用法实例:

QApplication::setStyle( new QWindowStyle );

当切换应用程序风格时,颜色调色板被设置回初始颜色或者系统默认。这是因为某一种风格不得不让颜色调色板完全适应风格的指导的需要。

也可以参考style()、QStylesetPalette()和desktopSettingsAware()。

实例:themes/themes.cpp

QStyle * QApplication::setStyle ( const QString & style ) [静态]这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

使用QStyleFactory来为style创建一个QStyle对象。

这个字符串必须是QStyleFactory::keys()之一,通常是“windows”、“motif”、“cde”、“motifplus”、“platinum”、“sgi”和“compact”。根据平台,“windowsxp”、“aqua”或“macintosh”也是可以用的。

如果一个未知的style被传递,返回0。

void QApplication::setWheelScrollLines ( int n ) [静态]设置当鼠标滚轮旋转时滚动的行数为n

如果这个数字超过某一个窗口部件中可视的行数,窗口部件应该把这个滚动操作解释为单一的上/下翻页的操作来替代。

也可以参考wheelScrollLines()。

void QApplication::setWinStyleHighlightColor ( const QColor & c ) [静态]

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

在窗口风格中,为了应用程序中的所有窗口部件,设置颜色用来遮蔽选择。如果这个颜色被改变了,所有的窗口部件都将被重新绘制。

默认颜色是darkBlue。

也可以参考winStyleHighlightColor()。

int QApplication::startDragDistance () [静态]如果你在你的应用程序中支持拖放并且一个拖动应该在一个鼠标点击并且移动鼠标一定距离之后才开始,你应该使用这个方法返回的值作为那个距离。

例如,如果鼠标点击的位置被存储在startPos并且当前位置(例如,在鼠标移动事件中)是currPos,你可以发现拖动是否开始的代码如下:

if ( ( startPos - currPos ).manhattanLength() > QApplication::startDragDistance() ) startTheDrag();

Qt内部使用这个值,例如在QFileDialog中。

这个值默认是4像素。

也可以参考setStartDragDistance()、startDragTime()和QPoint::manhattanLength()。

int QApplication::startDragTime () [静态]如果你在你的应用程序中支持拖放并且一个拖动应该在一个鼠标点击并且经过一段时间之后才开始,你应该使用这个方法返回的值作为那个拖延(以毫秒为单位)。

Qt也是在内部使用这个拖延,例如在QTextView和QLineEdit中来开始一个拖动。

默认值是500毫秒。

也可以参考setStartDragTime()和startDragDistance()。

bool QApplication::startingUp () [静态]如果应用程序对象还没有被创建,返回真,否则返回假。

也可以参考closingDown()。

QStyle & QApplication::style () [静态]返回应用程序的风格对象。

也可以参考setStyle()和QStyle

void QApplication::syncX () [静态]在X11中实现与X服务器的同步。这通常会占用一些时间。在其它平台上不做任何事。

也可以参考flushX()。

QWidgetList * QApplication::topLevelWidgets () [静态]返回应用程序中顶级窗口部件的列表。

这个列表是使用new创建的并且必须由调用者删除。

如果没有顶级窗口部件,这个列表是空的(QPtrList::isEmpty())。

注意一些顶级窗口部件也许被隐藏了,例如如果当前没有工具提示被显示的工具提示。

实例:

// 显示所有隐藏的顶级窗口部件。 QWidgetList *list = QApplication::topLevelWidgets(); QWidgetListIt it( *list ); // 遍历窗口部件 QWidget * w; while ( (w=it.current()) != 0 ) { // 对每一个顶级窗口部件 ++it; if ( !w->isVisible() ) w->show(); } delete list; // 删除这个列表,而不是窗口部件

警告: 只要你用完了这个列表,就删除它。列表中的窗口部件也许会在任何时候被其他人删除。

也可以参考allWidgets()、QWidget::isTopLevelQWidget::visibleQPtrList::isEmpty()。

QString QApplication::translate ( const char * context, const char * sourceText, const char * comment = 0, Encoding encoding = DefaultCodec ) const通过查询安装的消息文件,返回sourceText的翻译文本。消息文件被搜索的顺序是从最近安装的开始到最先安装的。

QObject::tr()和QObject::trUtf8()提供了更方便的这种功能。

context通常是一个类名(例如,“MyDialog”)并且sourceText是英语文本或者一个短的标识文本,如果输出文本很长(就像帮助文本那样的)。

comment是消除歧义的注释,当相同的sourceText在同样的上下文情况下被用在不同的规则中。默认情况下,它是零。encoding表明字符串的8位编码方式。

关于上下文和注释的更多信息请参考QTranslator文档。

如果消息文件中没有包含contextsourceText的翻译,这个函数返回一个和sourceText相等的QStringsourceText的编码方式由encoding指定,它默认为DefaultCodec

这个函数不是虚的。你可以使用继承QTranslator这样的替代翻译技术。

也可以参考QObject::tr()、installTranslator()和defaultCodec()。

bool QApplication::tryLock ()

试图锁定Qt库互斥量,并且立即返回。如果锁已经被获得,这个函数返回真。如果另外一个线程已经锁定了这个互斥量,这个函数返回假,而不是等待这个互斥量什么时候可用。

在另外一个线程能够成功地锁定它之前,这个互斥量必须使用unlock()解锁。

也可以参考lock()、unlock()和Qt中的线程支持

Type QApplication::type () const返回应用程序的类型,Tty、GuiClient或GuiServer。void QApplication::unlock ( bool wakeUpGui = TRUE )

对Qt库互斥量解锁。如果wakeUpGui为真(默认),那么图形用户界面线程将被QApplication::wakeUpGuiThread()唤醒。

也可以参考lock()、locked()和Qt中的线程支持

void QApplication::wakeUpGuiThread ()

唤醒图形用户界面线程。

也可以参考guiThreadAwake()和Qt中的线程支持

int QApplication::wheelScrollLines () [静态]返回当鼠标滚轮被旋转时,滚动的行数。

也可以参考setWheelScrollLines()。

QWidget * QApplication::widgetAt ( int x, int y, bool child = FALSE ) [静态]返回在全局屏幕位置(x, y)处的窗口部件的指针,或者如果没有Qt窗口部件在那里返回0。

如果child为假并且在位置(x, y)处有一个子窗口部件,包含它的顶级窗口部件将被返回。如果child为真,则在位置(x, y)处的子窗口部件被返回。

这个函数通常是相当慢的。

也可以参考QCursor::pos()、QWidget::grabMouse()和QWidget::grabKeyboard()。

QWidget * QApplication::widgetAt ( const QPoint & pos, bool child = FALSE ) [静态]这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。 返回在全局屏幕位置pos处的窗口部件的指针,或者如果没有Qt窗口部件在那里返回0。

如果child为假并且在位置pos处有一个子窗口部件,包含它的顶级窗口部件将被返回。如果child为真,则在位置pos处的子窗口部件被返回。

bool QApplication::winEventFilter ( MSG * ) [虚]消息程序在每次接受到消息时调用这个函数。如果你想处理Qt不处理的窗口消息msg,请重新实现这个函数。void QApplication::winFocus ( QWidget * widget, bool gotFocus )如果gotFocus为真,widget将变为激活窗口。否则这个激活窗口将被重新设置为NULL。const QColor & QApplication::winStyleHighlightColor () [静态]

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

返回在窗口风格中用来遮蔽选择的颜色。

也可以参考setWinStyleHighlightColor()。

WindowsVersion QApplication::winVersion () [静态]

返回当前运行的Windows操作系统的版本:

  • Qt::WV_95 - Windows 95
  • Qt::WV_98 - Windows 98
  • Qt::WV_Me - Windows Me
  • Qt::WV_NT - Windows NT 4.x
  • Qt::WV_2000 - Windows 2000 (NT5)
  • Qt::WV_XP - Windows XP

注意这个函数只对Qt的Windows版本实现了。

bool QApplication::x11EventFilter ( XEvent * ) [虚]这个虚函数只在X11下实现了。

如果你创建一个继承QApplication的应用程序并且重新实现这个函数,你可以直接访问从X服务器接收的所有X事件。

如果你想停止正在处理的事件,返回真,否则对于普通事件分派返回假。

也可以参考x11ProcessEvent()。

int QApplication::x11ProcessEvent ( XEvent * event )这个函数做不同的Xevent的核心处理,通常把Qt事件分派到正确的目的地。

如果这个时间被特殊处理消耗,返回1,如果event被普通处理消耗,返回0,并且如果event是针对不可识别的窗口部件,返回-1。

也可以参考x11EventFilter()。

相关函数void Q_ASSERT ( bool test )如果test为假,打印一个包含源代码文件名和行号的警告信息。

这是一个qglobal.h中定义的宏。

Q_ASSERT对于在你的程序中测试所需条件是很有用的。

实例:

// // File: div.cpp // #include <qglobal.h> int divide( int a, int b ) { Q_ASSERT( b != 0 ); // 这是第9行 return a/b; }

如果b为0,Q_ASSERT语句将会使用qWarning()函数输出下面的消息:

ASSERT: "b == 0" in div.cpp (9)

也可以参考qWarning()和调试

void Q_CHECK_PTR ( void * p )如果p为零,一个致命的消息说程序用完了内存并且退出。如果p为非零,什么也不发生。

这是一个qglobal.h中定义的宏。

实例:

int *a; Q_CHECK_PTR( a = new int[80] ); // 不要这样做! // 应该这样做: a = new int[80]; Q_CHECK_PTR( a ); // 这是正确的

也可以参考qFatal()和调试

void qAddPostRoutine ( QtCleanUpFunction p )

添加一个将被QApplication析构函数中调用的全局日常事务。这个函数通常用来添加在整个程序范围的功能的清理的日常事务。

这个由p给定的函数不应该有任何参数并且什么也不返回,就像这样:

static int *global_ptr = 0; static void cleanup_ptr() { delete [] global_ptr; global_ptr = 0; } void init_ptr() { global_ptr = new int[100]; // 分配数据 qAddPostRoutine( cleanup_ptr ); // 稍后删除 }

注意对于一个应用程序范围或者模块范围的清理,qAddPostRoutine()通常是不适合的。人们倾向于使用动态模块加载,并且在例如QApplication析构函数被调用的很早之前就卸载那些模块。

对于模块和库,使用引用计数的初始化管理器或者Qt的父子对象删除机制也许更好。这里是一个使用父子对象机制,在正确时间调用清理函数的私有类的实例:

class MyPrivateInitStuff: public QObject { private: MyPrivateInitStuff( QObject * parent ): QObject( parent) { // 这里是初始化 } MyPrivateInitStuff * p; public: static MyPrivateInitStuff * initStuff( QObject * parent ) { if ( !p ) p = new MyPrivateInitStuff( parent ); return p; } ~MyPrivateInitStuff() { // 在这里清理(“后面的日常事务”) } }

通过选择正确的父窗口部件/对象,这会在非常正确的时候完成清理模块数据的任务。

void qDebug ( const char * msg, ... )

打印调试消息msg,或者调用消息处理器(如果它已经被安装)。

这个函数使用一个格式化字符串和参数列表,和C中的printf()函数很相似。

实例:

qDebug( "my window handle = %x", myWidget->id() );

在X11下,这个文本被打印到标准错误输出。在Windows下,这个文本被打印到调试器。

警告:内部缓存被限制为8196字节(包括0结束符)。

也可以参考qWarning()、qFatal()、qInstallMsgHandler()和Debugging

void qFatal ( const char * msg, ... )

打印致命消息msg,或者调用消息处理器(如果它已经被安装)。

这个函数使用一个格式化字符串和参数列表,和C中的printf()函数很相似。

实例:

int divide( int a, int b ) { if ( b == 0 ) // 程序错误 qFatal( "divide: cannot divide by zero" ); return a/b; }

在X11下,这个文本被打印到标准错误输出。在Windows下,这个文本被打印到调试器。

警告:内部缓存被限制为8196字节(包括0结束符)。

也可以参考qDebug()、qWarning()、qInstallMsgHandler()和Debugging

QtMsgHandler qInstallMsgHandler ( QtMsgHandler h )安装Qt消息处理器h。返回以前定义的的消息处理器的指针。

消息处理器是一个打印调试消息、警告和致命错误消息的函数。Qt库(调试版)包含在发生内部错误(通常是无效函数参数)时要打印的数百条警告消息。如果你实现了你自己的消息处理器,你就得到这些消息的完全控制。

默认消息处理器在X11下把消息打印到标准输出,在Windows下打印到调试器。如果是一个致命消息,应用程序立即异常中断。

只能有一个消息处理器被定义,因为它通常在应用程序范围基础上控制调试输出。

恢复消息处理器,调用qInstallMsgHandler(0)。

实例:

#include <qapplication.h> #include #include void myMessageOutput( QtMsgType type, const char *msg ) { switch ( type ) { case QtDebugMsg: fprintf( stderr, "Debug: %s\n", msg ); break; case QtWarningMsg: fprintf( stderr, "警告: %s\n", msg ); break; case QtFatalMsg: fprintf( stderr, "Fatal: %s\n", msg ); abort(); // 决定把核心倒出 } } int main( int argc, char **argv ) { qInstallMsgHandler( myMessageOutput ); QApplication a( argc, argv ); ... return a.exec(); }

也可以参考qDebug()、qWarning()、qFatal()和调试

bool qSysInfo ( int * wordSize, bool * bigEndian )获取有关系统的信息。

wordSize中以位为单位返回系统字大小(通常位32)。如果这是一个以高位在前的机器,bigEndian被设置为真,或者如果这是一个以低位在前的机器,被设置为假。

在调试模式下,如果计算机是真正的怪异(例如对于16位和32位整数是不同的在前方式)这个函数调用qFatal()输出一个信息,在发布模式下,它返回假。

void qSystemWarning ( const char * msg, int code )

打印消息msg并且使用code来获得系统特定错误消息。当code为-1(默认),如果可能系统最后一个错误代码将被使用。使用这个方法来处理平台特定应用编程接口调用的失败。

当Qt在QT_NO_DEBUG被定义的情况下,这个函数什么都不做。

const char * qVersion ()返回Qt库的版本号,通常为“1.44”或“2.3.0”等。void qWarning ( const char * msg, ... )

打印警告消息msg,或者调用消息处理器(如果它已经被安装)。

这个函数使用一个格式化字符串和参数列表,和C中的printf()函数很相似。

实例:

void f( int c ) { if ( c > 200 ) qWarning( "f: bad argument, c == %d", c ); }

在X11下,这个文本被打印到标准错误输出。在Windows下,这个文本被打印到调试器。

警告:内部缓存被限制为8196字节(包括0结束符)。

也可以参考qDebug()、qFatal()、qInstallMsgHandler()和Debugging

阅读(4806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~