主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QApplication类管理图形用户界面应用程序的控制流和主要设置。 详情请见……
#include <qapplication.h>
继承了QObject。
被QXtApplication继承。
它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。
对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。
QApplication对象是可以通过全局变量qApp访问。它的负责的主要范围有:
应用程序排演实例包含了一个QApplication通常用法的典型完整的main()。
因为QApplication对象做了如此多的初始化,它必须在所有与用户界面相关的其它类被创建之前被创建。
因为它也处理命令行参数,在应用程序中对argv解释和修改之前创建它通常是一个好主意。(注意,也对于X11,setMainWidget()可以根据-geometry选项来改变主窗口部件。为了保持这个功能,你必须在setMainWidget()和它的任何重载之前设置你的默认。)
非图形用户界面程序:虽然Qt没有为写非图形用户界面程序而优化设计,不创建QApplication也可以使用它的一些类。如果你想在一个非图形用户界面服务器和一个图形用户界面客户端之间共享代码,这点很有用。
也可以参考主窗口和相关类。
这个枚举变量定义了应用程序的颜色分配策略:
完整细节请参考setColorSpec()。
这个枚举变量为translate()定义了字符串参数的8位编码。
也可以参考QObject::tr()、QObject::trUtf8()和QString::fromUtf8()。
这个枚举变量定义了QApplication的类型:
全局指针qApp指向这个应用程序对象。应该只有一个应用程序对象被创建。
这个应用程序对象必须在任何绘制设备(包括窗口部件、像素映射、位图等等)之前被构造。
注意argc和argv也可以被改变。Qt会移除它能够识别的命令行参数。原来的argc和argv稍后可以通过qApp->argc()和qApp->argv()来访问。argv()的文档中包含如何处理命令行参数的详细描述。
Qt调试选项(如果Qt被使用被定义的QT_NO_DEBUG标记进行编译,这些选项就是不可用的):
更详细的解释请参考调试技术。
所有的Qt程序自动支持下面这些命令行选项:
X11版本的Qt也支持传统的X11命令行选项:
对于没有图形用户界面的程序,设置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(); }
对于Qt/Embedded,在type传递QApplication::GuiServer参数将会使这个应用程序变为服务器(相当于使用-qws参数运行)。
这个只在X11上有效。
这个只在X11上有效。
当应用程序要退出主事件循环时,这个信号被发射。这也许发生在应用程序中调用quit()之后,或者当用户关闭整个桌面对话时。
如果你的应用程序在清空的最后一刻要做些什么,这个信号特别重要。注意在这种状态下没有任何用户交互。
也可以参考quit()。
模式对话框是特殊的顶级窗口部件,它是QDialog的子类,在构造函数中把模式参数设置为真。用户只有在关闭了模式窗口部件之后才能继续这个程序的其它部分。
模式窗口部件被组织在一个栈中。这个函数返回栈顶的激活窗口部件。
也可以参考activePopupWidget()和topLevelWidgets()。
弹出窗口部件是特殊的顶级窗口部件,它设置了窗口部件标记WType_Popup,例如QPopupMenu窗口部件。当应用程序打开一个弹出窗口部件,所有的事件都被发送给弹出窗口部件。在弹出窗口部件被关闭之前,普通窗口部件和模式对话框都不能被访问。
当弹出窗口部件被显示时,只有其它弹出窗口部件可以被打开。弹出窗口部件被组织在一个栈中。这个函数返回栈顶的弹出窗口部件。
也可以参考activeModalWidget()和topLevelWidgets()。
返回拥有键盘输入焦点的应用程序顶级窗口,或者如果没有应用程序窗口拥有焦点,返回0。注意尽管可能没有focusWidget(),仍然有可能activeWindow(),例如如果在窗口中没有窗口部件接收键盘事件。
也可以参考QWidget::setFocus()、QWidget::focus和focusWidget()。
也可以参考removeLibraryPath()、libraryPaths()和setLibraryPaths()。
这个列表必须使用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::visible和QPtrList::isEmpty()。
返回命令行参数的数量。
argv()的文档描述了如何处理命令行参数。
也可以参考argv()和QApplication::QApplication()。
实例:chart/main.cpp和scribble/scribble.cpp。
返回命令行参数矢量。
argv()[0]是程序名称,argv()[1]是第一个参数并且argv()[argc()-1]是最后一个参数。
QApplication对象是通过从main()函数传递的argc和argv被构造的。一些参数被作为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.cpp和scribble/scribble.cpp。
这个函数对于有很多顶级窗口部件的应用程序相当有用。例如,它可以被和文件菜单中的“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.cpp、application/application.cpp、helpviewer/helpwindow.cpp、mdi/application.cpp和qwerty/qwerty.cpp。
也可以参考startingUp()。
也可以参考QApplication::setColorSpec()。
这个函数处理对话管理。当QSessionManager想让应用程序提交它的所有数据时,它被调用。
通常这意味着在得到用户的许可之后保存所有打开的文件。此外你可能想提供让用户可以撤销这个关闭的选择。
注意你不应该在这个函数中退出这个应用程序。相反,对话管理器在这之后也许会,也许不会这样做,依赖上下文。
警告:在这个函数中,不能有任何用户交互,除非你请求对话管理器sm明确的允许。详细情况和使用实例请参考QSessionManager::allowsInteraction()和QSessionManager::allowsErrorInteraction()。
默认实现请求交互并且发送一个关闭事件给所有可视的顶级窗口部件。如果任何一个事件被拒绝,那么关闭被撤销。
也可以参考isSessionRestored()、sessionId()和saveState()。
在X11上的默认值是1000毫秒。在Windows上,使用控制面板的值。
窗口部件不应该存储这个值,因为它可能在任何时候被用户改变全局桌面设置而改变。
也可以参考setCursorFlashTime()。
桌面窗口部件对于获得屏幕大小很有用。在桌面上绘制也是可能的。我们建议不要假设可以在桌面上绘制,因为它不能在所有的操作系统上工作。
QDesktopWidget *d = QApplication::desktop(); int w = d->width(); // 返回桌面宽度 int h = d->height(); // 返回桌面高度
实例:canvas/main.cpp、desktop/desktop.cpp、helpviewer/main.cpp、i18n/main.cpp、qmag/qmag.cpp、qwerty/main.cpp和scribble/main.cpp。
也可以参考setDesktopSettingsAware()。
在X11上默认值为400毫秒。在Windows上,使用控制面板的值。
也可以参考setDoubleClickInterval()。
需要调用这个函数来开始事件处理。主事件循环从窗口系统中接收事件并且把它们分派给应用程序窗口部件。
通常来说,在调用exec()之前,没有用户交互可以发生。作为一个特例,像QMessageBox这样的模式对话框可以在调用exec()之前使用,因为模式对话框调用exec()来开始本地事件循环。
为了使你的应用程序执行空闲处理,例如,只要没有未处理地事件,执行一个特殊的函数,使用QTimer,0超时。更高级的空闲处理方案可以使用processEvents()来完成。
也可以参考quit()、exit()、processEvents()和setMainWidget()。
实例:biff/main.cpp、chart/main.cpp、fonts/simple-qfont-demo/simple-qfont-demo.cpp、life/main.cpp、t1/main.cpp、t4/main.cpp和xml/outliner/main.cpp。
在这个函数被调用之后,应用程序离开主事件循环并且从exec()调用之后返回。exec()函数返回retcode。
根据习惯,为0的retcode意味着成功,并且任何非零的值意味着错误。
注意与同名的C库函数不同,这个函数返回到调用者——它的事件处理结束。
实例:chart/chartform.cpp和picture/picture.cpp。
也可以参考enter_loop()和loopLevel()。
如果在异步的窗口系统,例如X11,或者双缓存的窗口系统,例如Mac OS X的不返回事件循环的循环中正在做图形变化,并且你想立即显现这些变化(比如,Splash Screen),请调用这个函数。
也可以参考flushX()、sendPostedEvents()和QPainter::flush()。
也可以参考syncX()。
实例:xform/xform.cpp。
返回拥有键盘输入焦点的应用程序窗口部件,或者在这个应用程序中没有窗口部件拥有焦点,返回0。
也可以参考QWidget::setFocus()、QWidget::focus和activeWindow()。
也可以参考setFont()、fontMetrics()和QWidget::font。
实例:qfd/fontdisplayer.cpp、themes/metal.cpp和themes/themes.cpp。
也可以参考font()、setFont()、QWidget::fontMetrics()和QPainter::fontMetrics()。
返回应用程序的全局strut。
strut是任何用户可以交互的图形交互界面元素的最小维数的大小对象。例如,没有按钮应该被重新定义大小小于全局strut大小。
也可以参考setGlobalStrut()。
当图形用户界面线程要处理一个事件循环的周期,这个信号被发射。
也可以参考wakeUpGuiThread()。
如果全局鼠标跟踪生效,返回真,否则返回假。
也可以参考setGlobalMouseTracking()。
去掉垂直对齐标记并且根据使用的语言把AlignAuto的对齐方式align转换为AlignLeft或者AlignRight。其它水平对齐标记不被改变而留下。
可以安装多种消息文件。翻译会在最后安装的消息文件中搜索,然后是紧接着最后的,并且继续,一直到最先安装的。一旦找到匹配的翻译,搜索就停止。
也可以参考removeTranslator()、translate()和QTranslator::load()。
实例:i18n/main.cpp。
默认,Qt将视图使用桌面设置。调用setDesktopSettingsAware(FALSE)可以防止这一点。
也可以参考setEffectEnabled()和Qt::UIEffect。
如果应用程序已经从以前的对方中恢复,返回真,否则返回假。
也可以参考sessionId()、commitData()和saveState()。
当用户关闭最后一个顶级窗口时,这个信号被发射。
当你的应用程序有很多顶级窗口部件,而没有主窗口部件时,这个信号很有用。你可以把它和quit()槽连接起来。
为了方便,对于短暂的顶级窗口部件,例如弹出菜单和对话框,这个信号不被发射。
也可以参考mainWidget()、topLevelWidgets()、QWidget::isTopLevel和QWidget::close()。
实例:action/main.cpp、addressbook/main.cpp、chart/main.cpp、helpviewer/main.cpp、qwerty/main.cpp和showimg/main.cpp。
如果你想遍历这个列表,你应该遍历一个复制,例如:
QStringList list = app.libraryPaths(); QStringList::Iterator it = list.begin(); while( it != list.end() ) { myProcessing( *it ); ++it; }
关于如何使用库路径的详细情况请参考插件文档。
也可以参考setLibraryPaths()、addLibraryPath()、removeLibraryPath()和QLibrary。
锁住Qt库互斥量。如果另外一个线程已经锁住这个互斥量,那么这个调用线程将会阻塞,直到其它线程对这个互斥量解锁。
也可以参考unlock()、locked()和Qt中的线程支持。
如果Qt库互斥量被不同的线程锁住,返回真,否则返回假。
警告:由于在被支持的平台上,递归互斥量的实现不同,在以前锁住互斥量的同一个线程中调用这个函数将会给出不确定的结果。
也可以参考lock()、unlock()和Qt中的线程支持。
也可以参考enter_loop()和exit_loop()。
如果你创建一个继承QApplication并且重新实现这个函数的应用程序,你可以直接访问从Mac OS接收的所有Carbon事件。
如果你想停止正在处理的事件,返回真。对于普通事件分派,返回假。
返回主应用程序窗口部件,如果没有主窗口部件,返回0。
也可以参考setMainWidget()。
对于确定类型的事件(例如鼠标和键盘事件),如果接收者对这个事件没有兴趣(也就是说它返回假),事件将被传播给接收者的父对象一直到顶级对象。
这里有事件被处理的五种不同方法,重新实现这个函数是其中的一个。所有这五种途径如下:
也可以参考QObject::event()和installEventFilter()。
返回激活的应用程序强制光标。
如果没有应用程序关标被指定(也就是说内部光标栈为空),这个函数返回0。
也可以参考setOverrideCursor()和restoreOverrideCursor()。
如果被传递的窗口部件w,返回这个窗口部件的默认调色板。这个可能是,也可能不是应用程序调色板。在绝大多数情况下,普通类型的窗口部件没有特殊调色板,但是一个需要注意的例外是在Windows下的弹出菜单,如果用户在显示设置中为菜单定义了特定背景色。
也可以参考setPalette()和QWidget::palette。
实例:desktop/desktop.cpp、themes/metal.cpp和themes/wood.cpp。
通常当窗口部件被抛光时,它们会自动调用这个函数。它也可以被用来做窗口部件的基于风格的主要定制。
注意你不会被QWidget的公有函数限制。相反,基于像QObject::className()这些元信息,你可以对任何种类的窗口部件进行定制。
也可以参考QStyle::polish()、QWidget::polish()、setPalette()和setFont()。
这个时间必须在堆中被分配,因为递送事件队列将会得到事件的所有权并且一旦它被递送就删除它。
当控制返回主事件循环,存储在队列中的所有事件将被使用notify()函数发送。
也可以参考sendEvent()、QThread::postEvent()和notify()。
偶尔当你的程序很忙来处理一个长期操作(例如,复制文件),你可以调用这个函数。
实例:fileiconview/qfileiconview.cpp。
处理未处理的事件,在maxtime毫秒内或者直到没有没有更多的事件要处理,看哪一个更短。
偶尔当你的程序很忙来处理一个长期操作(例如,复制文件),你可以调用这个函数。
这个函数对于使Qt能够适应事件处理必须移植到已经存在的程序循环中很有用处。
在新的应用程序中使用这个函数可能意味着设计的问题。
也可以参考processEvents()、exec()和QTimer。
把lastWindowClosed()信号和quit()连接起来是很普通的,并且你也可以经常把比如QButton::clicked()或者QAction、QPopupMenu或QMenuBar中的信号和它连接起来。
实例:
QPushButton *quitButton = new QPushButton( "Quit" ); connect( quitButton, SIGNAL(clicked()), qApp, SLOT(quit()) );
也可以参考exit()、aboutToQuit()、lastWindowClosed()和QAction。
实例:addressbook/main.cpp、helpviewer/main.cpp、qwerty/main.cpp、showimg/main.cpp、t2/main.cpp、t4/main.cpp和t6/main.cpp。
这个方法是不可移植的。它只在Qt/Embedded中有效。
也可以参考QWSDecoration。
如果你创建一个继承QApplication并且重新实现这个函数的一个应用程序,你可以直接处理从QWS(Q窗口系统)进程接收的说有QWS事件。
如果你想停止要处理的事件,返回真。对于普通事件分派,返回假。
Qt/Embedded在8位显示时分配一个标准的216颜色立方体。它保留了40个颜色可以用来在任何客户端连接之前由QWS主进程设置一个自定义颜色表。
colorTable是任何最多为40的自定义颜色数组。start是开始索引(0-39),并且numColors是要设置的颜色数量(1-40)。
这个方法是不可移植的。它只在Qt/Embedded有效。
这个方法是不可移植的。它只在Qt/Embedded有效。
也可以参考QWSDecoration。
也可以参考addLibraryPath()、libraryPaths()和setLibraryPaths()。
这些事件不被分派,相反它们会从队列中被移除。你应该永远不需要调用这个函数。如果你调用了,要直到杀掉事件可能导致receiver破坏一个或多个变量。
也可以参考installTranslator()、translate()和QObject::tr()。
实例:i18n/main.cpp。
如果setOverrideCursor()已经被调用两次,调用restoreOverrideCursor()会激活第一个光标设置。第二次调用这个函数会恢复初始窗口部件的光标。
也可以参考setOverrideCursor()和overrideCursor()。
也可以参考setReverseLayout()。
这个函数处理对话管理。当对话管理器想让应用程序为未来的对话保存它的状态时,它被调用。
例如,文本编辑器将会创建一个包含编辑缓存的当前内容的临时文件,光标的位置和当前编辑对话的其它特征。
注意你不应该在这个函数中退出这个应用程序。相反,对话管理器在这之后也许会,也许不会这样做,依赖上下文。此外,绝大多数对话管理器将会在应用程序已经被开始之后立即请求一个状态保存。这允许对话管理器来知道应用程序的重启策略。
警告:在这个函数中,不能有任何用户交互,除非你请求对话管理器sm明确的允许。详细情况和使用实例请参考QSessionManager::allowsInteraction()和QSessionManager::allowsErrorInteraction()。
也可以参考isSessionRestored()、sessionId()和commitData()。
使用notify()函数直接发送事件event给接受者receiver。返回由事件处理器返回的值。
这个事件在它被发送时,不能被删除。通常的访问方式是在栈中创建这个事件,例如:
QMouseEvent me( QEvent::MouseButtonPress, pos, 0, 0 ); QApplication::sendEvent( mainWindow, &me );如果你在堆中创建这个事件,你就必须删除它。
实例:popup/popup.cpp。
注意来自窗口系统的事件不能被这个函数分派,但是可以用processEvents()。
返回当前对话的标识符。
如果应用程序已经从一个较早的对话中恢复,这个标识符就和那个先前的对话一样。
对话标识符已经被保证对于不同的应用程序和同一个应用程序的不同实例都是唯一的。
也可以参考isSessionRestored()、commitData()和saveState()。
颜色策略控制着当在一个显示颜色总数有限制的情况下运行应用程序如何分配颜色,例如8位/256色显示。
颜色策略必须在你创建QApplication对象之前设置。
选项有:
要知道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.cpp、showimg/main.cpp、t9/main.cpp、tetrix/tetrix.cpp和themes/main.cpp。
注意在Microsoft Windows上,调用这个函数会设置所有窗口的光标闪烁时间。
也可以参考cursorFlashTime()。
如果程序中的文字引用文本不是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()。这些字符串使用英语,所以对于完整的翻译,编解码器将被这些字符串需要。
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()。
注意在Microsoft Windows上,调用这个函数会设置所有窗口的双击间隔。
也可以参考doubleClickInterval()。
也可以参考isEffectEnabled()、Qt::UIEffect和setDesktopSettingsAware()。
当应用程序启动时,默认字体依赖于窗口系统。它非常依赖于窗口系统的版本和本地设置。这个函数让我们不顾默认字体,但是这种不顾也许是一个坏主意,因为,例如,一些本地设置需要支持它的一些特殊字符需要特大字体。
也可以参考font()、fontMetrics()和QWidget::font。
实例:desktop/desktop.cpp、qfd/qfd.cpp、showimg/main.cpp、themes/metal.cpp和themes/themes.cpp。
使全局鼠标跟踪生效将使窗口部件时间过滤器或者应用程序事件过滤器能够获得所有的鼠标移动事件,尽管当没有按键被按下的时候。这对于特殊图形用户界面元件,比如工具提示,是很有用的。
全局鼠标跟踪不会影响窗口部件和它们的mouseMoveEvent()。对于一个要在按键不被按下时得到鼠标移动事件的窗口部件,它必须做QWidget::setMouseTracking(TRUE)。
这个函数使用内部计数器。每一个setGlobalMouseTracking(TRUE)都必须有一个相对应的setGlobalMouseTracking(FALSE):
// 在这点,全局鼠标跟踪是关闭的 QApplication::setGlobalMouseTracking( TRUE ); QApplication::setGlobalMouseTracking( TRUE ); QApplication::setGlobalMouseTracking( FALSE ); // 在这点,它仍然是打开的 QApplication::setGlobalMouseTracking( FALSE ); // 但是现在它是关的
也可以参考hasGlobalMouseTracking()和QWidget::mouseTracking。
strut是任何用户可以交互的图形交互界面元素的最小维数的大小对象。例如,没有按钮应该被重新定义大小小于全局strut大小。
当重新实现用于在触摸屏或者类似输入输出设备的图形用户界面控制时,strut的大小应该被考虑。
实例:
QSize& WidgetClass::sizeHint() const { return QSize( 80, 25 ).expandedTo( QApplication::globalStrut() ); }
也可以参考globalStrut()。
也可以参考libraryPaths()、addLibraryPath()、removeLibraryPath()和QLibrary。
主窗口部件的绝大部分责任和任何其它窗口部件一样,除了如果它被删除,应用程序就退出。
你也可以不需要主窗口部件,把lastWindowClosed()连接到quit()是一个替换方法。
对于X11,这个函数也可以根据-geometry命令行参数来移动和改变主窗口部件的大小,所以你应该在调用setMainWidget()之前设置默认几何形状(使用QWidget::setGeometry())。
也可以参考mainWidget()、exec()和quit()。
实例:canvas/main.cpp、chart/main.cpp、fonts/simple-qfont-demo/simple-qfont-demo.cpp、life/main.cpp、t1/main.cpp、t4/main.cpp和xml/outliner/main.cpp。
应用程序强制光标是为了显示应用程序是在特定状态下,例如在一个操作期间也许会占用一些时间。
这个光标将在所有应用程序的窗口部件中被显示,直到restoreOverrideCursor()或者另一个setOverrideCursor()被调用。
应用程序光标被存储到内部栈中。setOverrideCursor()把光标压到栈中,并且restoreOverrideCursor()把激活的光标从栈中弹出。每一个setOverrideCursor()都必须最后有一个对应的restoreOverrideCursor()跟着,否则栈将永远不会被清空。
如果replace为真,新的光标将替换最近一个强制光标(栈将保持它的深度)。如果replace为假,新的光标将被要到栈顶。
实例:
QApplication::setOverrideCursor( Qt::WaitCursor ); calculateHugeMandelbrot(); // 消耗时间…… QApplication::restoreOverrideCursor();
也可以参考overrideCursor()、restoreOverrideCursor()和QWidget::cursor。
如果className被传递,那么改变只对继承className的类适用(由QObject::inherits()报告的)。如果className为0,变化将影响所有窗口部件,这样会强制覆盖以前任何类的特定调色板。
这个调色板会根据QStyle::polish()中当前的图形用户界面风格而被改变。
也可以参考QWidget::palette、palette()和QStyle::polish()。
实例:i18n/main.cpp、themes/metal.cpp、themes/themes.cpp和themes/wood.cpp。
也可以参考reverseLayout()。
也可以参考startDragDistance()。
也可以参考startDragTime()。
用法实例:
QApplication::setStyle( new QWindowStyle );
当切换应用程序风格时,颜色调色板被设置回初始颜色或者系统默认。这是因为某一种风格不得不让颜色调色板完全适应风格的指导的需要。
也可以参考style()、QStyle、setPalette()和desktopSettingsAware()。
使用QStyleFactory来为style创建一个QStyle对象。
这个字符串必须是QStyleFactory::keys()之一,通常是“windows”、“motif”、“cde”、“motifplus”、“platinum”、“sgi”和“compact”。根据平台,“windowsxp”、“aqua”或“macintosh”也是可以用的。
如果一个未知的style被传递,返回0。
如果这个数字超过某一个窗口部件中可视的行数,窗口部件应该把这个滚动操作解释为单一的上/下翻页的操作来替代。
也可以参考wheelScrollLines()。
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
在窗口风格中,为了应用程序中的所有窗口部件,设置颜色用来遮蔽选择。如果这个颜色被改变了,所有的窗口部件都将被重新绘制。
默认颜色是darkBlue。
也可以参考winStyleHighlightColor()。
例如,如果鼠标点击的位置被存储在startPos并且当前位置(例如,在鼠标移动事件中)是currPos,你可以发现拖动是否开始的代码如下:
if ( ( startPos - currPos ).manhattanLength() > QApplication::startDragDistance() ) startTheDrag();
Qt内部使用这个值,例如在QFileDialog中。
这个值默认是4像素。
也可以参考setStartDragDistance()、startDragTime()和QPoint::manhattanLength()。
Qt也是在内部使用这个拖延,例如在QTextView和QLineEdit中来开始一个拖动。
默认值是500毫秒。
也可以参考setStartDragTime()和startDragDistance()。
也可以参考closingDown()。
也可以参考flushX()。
这个列表是使用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::isTopLevel、QWidget::visible和QPtrList::isEmpty()。
QObject::tr()和QObject::trUtf8()提供了更方便的这种功能。
context通常是一个类名(例如,“MyDialog”)并且sourceText是英语文本或者一个短的标识文本,如果输出文本很长(就像帮助文本那样的)。
comment是消除歧义的注释,当相同的sourceText在同样的上下文情况下被用在不同的规则中。默认情况下,它是零。encoding表明字符串的8位编码方式。
关于上下文和注释的更多信息请参考QTranslator文档。
如果消息文件中没有包含context中sourceText的翻译,这个函数返回一个和sourceText相等的QString。sourceText的编码方式由encoding指定,它默认为DefaultCodec。
这个函数不是虚的。你可以使用继承QTranslator这样的替代翻译技术。
也可以参考QObject::tr()、installTranslator()和defaultCodec()。
试图锁定Qt库互斥量,并且立即返回。如果锁已经被获得,这个函数返回真。如果另外一个线程已经锁定了这个互斥量,这个函数返回假,而不是等待这个互斥量什么时候可用。
在另外一个线程能够成功地锁定它之前,这个互斥量必须使用unlock()解锁。
也可以参考lock()、unlock()和Qt中的线程支持。
对Qt库互斥量解锁。如果wakeUpGui为真(默认),那么图形用户界面线程将被QApplication::wakeUpGuiThread()唤醒。
也可以参考lock()、locked()和Qt中的线程支持。
唤醒图形用户界面线程。
也可以参考guiThreadAwake()和Qt中的线程支持。
也可以参考setWheelScrollLines()。
如果child为假并且在位置(x, y)处有一个子窗口部件,包含它的顶级窗口部件将被返回。如果child为真,则在位置(x, y)处的子窗口部件被返回。
这个函数通常是相当慢的。
也可以参考QCursor::pos()、QWidget::grabMouse()和QWidget::grabKeyboard()。
如果child为假并且在位置pos处有一个子窗口部件,包含它的顶级窗口部件将被返回。如果child为真,则在位置pos处的子窗口部件被返回。
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
返回在窗口风格中用来遮蔽选择的颜色。
也可以参考setWinStyleHighlightColor()。
返回当前运行的Windows操作系统的版本:
注意这个函数只对Qt的Windows版本实现了。
如果你创建一个继承QApplication的应用程序并且重新实现这个函数,你可以直接访问从X服务器接收的所有X事件。
如果你想停止正在处理的事件,返回真,否则对于普通事件分派返回假。
也可以参考x11ProcessEvent()。
如果这个时间被特殊处理消耗,返回1,如果event被普通处理消耗,返回0,并且如果event是针对不可识别的窗口部件,返回-1。
也可以参考x11EventFilter()。
这是一个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)
这是一个qglobal.h中定义的宏。
实例:
int *a; Q_CHECK_PTR( a = new int[80] ); // 不要这样做! // 应该这样做: a = new int[80]; Q_CHECK_PTR( a ); // 这是正确的
添加一个将被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() { // 在这里清理(“后面的日常事务”) } }
通过选择正确的父窗口部件/对象,这会在非常正确的时候完成清理模块数据的任务。
打印调试消息msg,或者调用消息处理器(如果它已经被安装)。
这个函数使用一个格式化字符串和参数列表,和C中的printf()函数很相似。
实例:
qDebug( "my window handle = %x", myWidget->id() );
在X11下,这个文本被打印到标准错误输出。在Windows下,这个文本被打印到调试器。
警告:内部缓存被限制为8196字节(包括0结束符)。
也可以参考qWarning()、qFatal()、qInstallMsgHandler()和Debugging。
打印致命消息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。
消息处理器是一个打印调试消息、警告和致命错误消息的函数。Qt库(调试版)包含在发生内部错误(通常是无效函数参数)时要打印的数百条警告消息。如果你实现了你自己的消息处理器,你就得到这些消息的完全控制。
默认消息处理器在X11下把消息打印到标准输出,在Windows下打印到调试器。如果是一个致命消息,应用程序立即异常中断。
只能有一个消息处理器被定义,因为它通常在应用程序范围基础上控制调试输出。
恢复消息处理器,调用qInstallMsgHandler(0)。
实例:
#include <qapplication.h> #include <stdio.h> #include <stdlib.h> 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()和调试。
在wordSize中以位为单位返回系统字大小(通常位32)。如果这是一个以高位在前的机器,bigEndian被设置为真,或者如果这是一个以低位在前的机器,被设置为假。
在调试模式下,如果计算机是真正的怪异(例如对于16位和32位整数是不同的在前方式)这个函数调用qFatal()输出一个信息,在发布模式下,它返回假。
打印消息msg并且使用code来获得系统特定错误消息。当code为-1(默认),如果可能系统最后一个错误代码将被使用。使用这个方法来处理平台特定应用编程接口调用的失败。
当Qt在QT_NO_DEBUG被定义的情况下,这个函数什么都不做。
打印警告消息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。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|