QApplication的用法

摘要:
QApplication包括由窗口系统和其他源处理和发送的主事件循环。QApplication可以设置大部分系统和应用程序设置。QApplication可以处理命令行参数,所以在处理命令行的参数之前先创建它。
QApplication的用法

来源 https://blog.csdn.net/qq_21342281/article/details/85322927

QApplication管理GUI程序的控制流和主要设置。

QApplication包含窗口系统和其他来源处理过和发送过的主事件循环。它也处理应用程序的初始化和收尾工作,并提供对话管理。QApplication可以对系统和应用的大部分设置项进行设置。

对于用Qt写的任何一个GUI应用,不管这个应用有没有窗口或多少个窗口,有且只有一个QApplication对象。

而对于用Qt写的非GUI应用,则有且只有一个QCoreApplication对象,并且这个应用不依赖QtGui库。

这个QApplication对象的指针可以通过instance()函数获取,它和一个全局指针--qApp等价。

QApplication的主要功能是:

1、使用所在桌面的参数例如调色板(palette())、字体(font())、双击间隔(doubleClickInterval())等信息初始化应用程序。当我们改变桌面的一些设置时,可以让应用程序的这些设置保持一致。

2、QApplication从底层窗口系统接收事件,并通过sendEvent()或postEvent()发送给需要的窗口。

3、通过解析命令行参数,来设置程序内部状态。

4、在运行时,可以通过setStyle()函数来改变QApplication包含的一个QStyle对象,从而改变应用程序的外观。

5、制定程序的颜色策略,详见setColorSpec()函数说明。

6、通过translate()函数可以设置本地化的字符串。

7、QApplication还包含一些非常方便的类,例如屏幕信息类(desktop())和剪切板类(clipboard())。

8、QApplication包含所有窗口的信息,可以知道程序在屏幕上的位置(widgetAt()),顶层窗口列表(topLevelWidgets()),关闭所有窗口(closeAllWindows())等等。

9、QApplication能够管理鼠标光标样式。参照setOverrideCursor();

10、在Linux系统的中,它提供刷新和同步通讯流的函数,参看flushX()和syncX()。

11、QApplication提供全面的与用户交互界面。当用户注销时,可以正常关闭;如果不能终止程序,它能取消关机进程;甚至可以保存程序全部状态。参看 isSessionRestored(),sessionId() and commitData() and saveState()

 既然QApplication做了这么多初始化工作,因此它必须在创建其他与用户界面相关的类之前创建。QApplication能够处理命令行参数,所以在想要处理命令行参数之前就要创建它。

头文件:#include<QApplication>

继承自:QCoreApplication

一、公共函数

1、QApplication::QApplication(int & argc,char ** argv)

1.1、 使用在argv中包含的argc个命令行参数,初始化窗口系统及应用对象。

1.2、有一个全局的指针app指向应用对象(QApplication)。并且只能创建一个QApplication对象。

1.3、QApplication对象必须在绘制设备(设备包括窗口、像素映射、位图等)之前创建。

1.4、Qt只将能够识别的命令行参数,赋值给argv及argc。可识别的命令行参数如下:

1.5、Qt 命令行调试参数(如果Qt编译时没有加QT_DEBUG标记,则认为调试参数是无效的)

    -nograb:告诉Qt一定不会获取鼠标和键盘事件;

    -dograb:忽略-nograb选项功能,不管-nograb选项是否存在命令行参数中;

    -sync:只有在X11系统下有效,调试时和调试服务器保持同步;

1.6、所有的Qt程序都支持如下的命令行参数:

    -style=风格:设置程序GUI风格。该值可以是关于主题、窗口等。如果你想在编译Qt时使用风格或者额外的关于风格插件,这个参数可以帮你实现。

    -style 样式:同上;

    -stylesheet = 样式表:设置程序样式表。这个参数必须是一个包含样式表的文件;

         注意:该文件中样式表的相对路径是相对该文件的。

    -stylesheet 样式表:同上;

    -session= 会话:从最近的会话中恢复程序。

    -session 会话:同上;

    -widgetcount:在程序崩溃时,打印崩溃前的几个窗口信息和最后同时存在的窗口数量。

    -reverse:设置程序自动布局方向从右到左,对文字的处理方向从右到左;

    -graphicssystem:设置场景窗口和QPixmaps可用的后台支持,有效的参数是raster和opengl

    -gmljsdebugger=,通过设置特殊的端口号,激活QML/JS调试器,端口号格式为:1234[,块],块是可选的参数。同时使程序等待一个调试器来连接。

1.7、用于X11版本Qt的参数

     -display 显示:设置X显示,默认值是$DISPLAY

     -geometry 位置大小:设置第一个窗口显示的位置。

    -fn 或者-font 字体:设置程序字体。该参数必须是系统能够识别的。如果Qt程序配置了字体,该参数会被忽略;

    -bg或者-background 颜色:设置程序默认的背景色;

2、QApplication::QApplication(int & argc,char ** argv, bool GUIenabled)

 如果GUIenabled为true,将创建一个GUI程序,否则创建一个控制台程序(没有用户界面的程序);

在X11系统上,如果为false,程序将不会连接X服务器;

3、QApplication::QApplication(int & argc,char ** argvType type)

 enum QApplication::Type

ConstantValueDescription
QApplication::Tty0a console application控制台程序
QApplication::GuiClient1a GUI client application GUI客户端程序
QApplication::GuiServer2

a GUI server application (for Qt for Embedded Linux)

GUI服务器程序(用在嵌入式linux Qt) 和-qws作用相同

 4、QApplication::QApplication(Display * display,Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0)

     创建一个能够在一个已经开始工作的显示器上显示的程序,只在X11系统上有效,并且真彩色位深大于8比特每像素。

5、QApplication::QApplication(Display * display,int & argc, char ** argv,Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0)

    同上;

6、QApplication::QApplication(QApplication::QS60MainApplicationFactory factory,int & argc, char ** argv)

 用于塞班系统

7、QApplication::~QApplication()

清理程序所有窗口分配的资源;设置全局指针qApp为0;

8、void QApplication::aboutQt()[static slot]  静态槽函数

 显示一个关于Qt版本等信息的消息对话框。

9、void QApplication::aboutToReleaseGpuResources() [signal]信号

 只用在塞班系统中,当程序释放GPU资源时,触发该信号。

10、void QApplication::aboutToUseGpuResources()  [signal]信号

只用在塞班系统中,当程序使用GPU资源时,触发该信号。

11、QWidget * QApplication::activePopupWidget()     [static]静态函数

      返回一个弹出窗口;弹出窗口是一个特殊的顶层窗口的(将窗口标志设置为Qt::WType_Popup)。当程序打开一个弹出窗口时,所有的事件都将发送给弹出窗口,其他窗口不能操作。

      如果已经有弹出窗口,再次弹出窗口时,这个窗口将被放入一个栈中,并返回栈顶的窗口。

12、QWidget * QApplication::activeModalWidget()  [static]静态函数

     返回一个活动的模态窗口;模态窗口是一个特殊的顶层窗口,事件循环在模态窗口中,模态模式下不能操作其他窗口部件。

     所有的模态窗口被放入一个栈中,这个函数返回栈定的窗口。

13、QWidget * QApplication::activeWindow() [static]静态函数

      返回一个有焦点的窗口顶层窗口,如果返回0,则代表应用程序没有焦点。

14、void QApplication::alert(QWidget * widget,int msec = 0)

     向窗口发出警告,就像windows下任务栏中上的图标闪现状态。

15、QWidgetList QApplication::allWidgets()[static]静态函数

       返回应用程序的所有窗口列表。

16、void QApplication::beep()    [static]静态函数

      使用默认的音量和铃声,发出铃声。

17、void QApplication::changeOverrideCursor(constQCursor & cursor)  [static]静态函数

     改变光标;使用该函数前必须先设置光标(setOverrideCursor)。

18、QClipboard * QApplication::clipboard()    [static]静态函数

     返回一个只向全局粘贴板的指针。

19、void QApplication::closeAllWindows()   [static slot]静态槽函数

     关闭所有顶层窗口;例如,文件菜单中的关闭按钮就与该槽链接。窗口的关闭顺序是随机的。默认情况下程序会在所有窗口关闭后退出,除非设置quitOnLastWindowClosed为false;

20、int QApplication::colorSpec()    [static]静态函数

      返回最多可用的颜色总数。参见QApplication::setColorSpec().

21、void QApplication::commitData(QSessionManager & manager)    [virtual]虚函数

     相关的QSessionManager希望应用保存所有数据。也就是,保存所有打开着的并且具有操作权限的文件。

22、 void QApplication::commitDataRequest(QSessionManager & manager)  [signal]信号

      当QSessionManager向让程序保存数据时,发射该信号,当连接该信号时,应该使用 Qt::DirectConnection做为connect的第五个参数

 23、QDesktopWidget * QApplication::desktop()[static]静态函数

      返回桌面信息QDesktopWidget。

24、bool QApplication::desktopSettingsAware()[static]静态函数

      如果Qt使用系统标准颜色、字体则返回真,否则返回假

25、bool QApplication::event(QEvent * e)  [virtual protected]虚受保护函数

       QObject::event()的重新实现

26、int QApplication::exec()

      进入主循环,知道exit()被调用。

27、void QApplication::focusChanged(QWidget * old,QWidget * now)  [signal]信号

       焦点改变时,该信号出发。

28、QWidget * QApplication::focusWidget()  [static]静态函数

       返回获得焦点的窗口。

29、QFont QApplication::font()[static]静态函数

       返回程序默认的字体

30、void QApplication::fontDatabaseChanged() [signal]信号

      当程序加载或删除字体时,发送该信号

31、QFontMetrics QApplication::fontMetrics()[static]静态函数

      返回应用程序字体规格(长宽间距等参数)。

32、QInputContext * QApplication::inputContext() const           [static]静态函数

     返回应用程序的输入法(软件盘)QInputContext:通过模拟发送按键事件,实现与键盘输入相同的效果。

33、bool QApplication::isEffectEnabled(Qt::UIEffect effect)  [static]静态函数

        如果使用系统的设置(颜色字体等)则返回真,否则返回假。Qt::UIEffect :一个枚举,描述可用的UI效果。

34、bool QApplication::isLeftToRight()[static]静态函数

       是否从左到右布局。

35、bool QApplication::isRightToLeft()[static]静态函数

      是否从右到左布局。

36、bool QApplication::isSessionRestored() const

      应用程序是否从最近一个会话中恢复。

37、Qt::KeyboardModifiers QApplication::keyboardModifiers()

      返回当前修饰键的状态。

38、void QApplication::lastWindowClosed()[signal]信号

       当最后一个窗口关闭时,发送该信号。

39、Qt::MouseButtons QApplication::mouseButtons()

     返回当前鼠标按键

41、QCursor * QApplication::overrideCursor()[static]静态函数

       返回光标

42、QPalette QApplication::palette()[static]静态函数

       返回调色板

43、QPalette QApplication::palette(constQWidget * widget)[static]静态函数

      返回窗口部件widget的调色板

44、Qt::KeyboardModifiers QApplication::queryKeyboardModifiers()

       返回当前修饰键的状态。注意这是按键的实际状态,与keyboardModifiers不同

45、void QApplication::restoreOverrideCursor()

     撤销上一次setOverrideCursor()操作

46、void QApplication::setActiveWindow(QWidget * active)

      设置指定的窗口active为活动窗口,当不能使该窗口获得键盘焦点,若想获取键盘焦点可以使用QWidget::activateWindow()函数

47、void QApplication::setColorSpec(int spec)

    设置颜色规格。

48、void QApplication::setDesktopSettingsAware(bool on)

     是否使用系统标准设置参数,颜色字体等

49、void QApplication::setFont(constQFont & font, const char * className = 0)

    设置字体,如果className给出,将设置指定类className的字体

50、void QApplication::setGraphicsSystem(constQString & system)

     设置用于支持窗口部件和QPixmaps等图像的后端处理,有效的参数:native(本地)、raster(栅格)、opengl(OpenGL)

     以下方法设置图像后端,优先级从高到低:

     命令行:graphicssystem

     函数:QApplication::setGraphicsSystem

     环境变量:QT_GRAPHICSSYSTEM

     编译配置configure:graphicssystem

51、void QApplication::setInputContext(QInputContext * inputContext)

    设置QInputContext

52、void QApplication::setOverrideCursor(constQCursor & cursor)

    设置光标

53、void QApplication::setPalette(constQPalette & palette, const char * className = 0)

    设置调色板

54、void QApplication::setStyle(QStyle * style)

    设置程序风格

55、void QApplication::syncX()

    在X11桌面系统中,同步X服务器

56、QWidget * QApplication::topLevelAt(constQPoint & point)

     返回指定位置的顶层窗口

57、QWidget * QApplication::topLevelAt(int x,int y)

    返回指定位置的顶层窗口

58、QWidgetList QApplication::topLevelWidgets()

    返回窗口列表

59、Type QApplication::type()

    返回程序类型:

QApplication::Tty0a console application控制台程序
QApplication::GuiClient1a GUI client application
QApplication::GuiServer2a GUI server application (for Qt for Embedded Linux)

60、QWidget * QApplication::widgetAt(constQPoint & point)

   返回指定位置的窗口部件

61、QWidget * QApplication::widgetAt(int x,int y)

   返回指定位置的窗口部件

    -fg或者-foreground 颜色:设置程序默认的前景色;

    -btn或者-button 颜色:设置默认的按钮颜色;

    -name 名字:设置程序的名字;

    -title标题:设置程序的标题;

    -visual TrueColor:在8位显示屏上强制使用真彩色;

    -ncols 数字:在8位显示屏上,如果使用QApplication::ManyColor,则限制颜色的数量。如果参数为216,则使用6X6X6颜色体,其他值按2X3X1的比例使用;

    -cmap:让程序在8位显示屏上安装定制色图;

    -im:设置于服务器相关的输入方法(相当于设置X调试器XMODIFIERS的环境变量)

    -inputstyle:输入风格样式

================= End

免责声明:文章转载自《QApplication的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇adb shell 查看系统属性(用来判断特殊的操作系统)MQTT协议详解一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python——GUI编程 控件及常用信号

QSlider类中的常用信号 valueChanged: 当滑块位置发生改变时触发此信号 sliderPressed: 当用户按下滑块时触发此信号 sliderMoved: 当用户拖动滑块时触发此信号 sliderReleased: 当用户释放滑块时触发此信号 QCmoboBox类中的常用信号 Activated: 当用户选中一个下拉选项时触发该信号cur...

谈java之GUI与安卓

首先说说swing的特点: 1.拥有一个丰富,快捷的用户界面元素集合。 2.与运行平台的依赖性很小,因此bug很少。 3.对于不同的运行平台,可以给用户一致的感觉。但是所制作的用户界面与本地运行平台有很大的差别。 java的图像用户界面并不是他的强项,不管是最初的awt,还是后来的swing都是同样的,不过对于目前我个人安卓的学习来说,尽管是用了xml去写...

jmeterGUI&amp;amp;非GUI模式之如何减负性能调优

jmeter之如何减负-实现稳定超高并发测试(性能调优)在测试过程中,初学者使用工具不当,添加众多监控组件,非常想看到实时报告,跑不了一会,jmeter就卡死甚至内存耗尽,只得重启,之前的统计报告没了,非常郁闷。 总结下如何正确使用jmeter,有效利用执行资源,小型机器也可以实现高并发负载。 1、优化监听(GUI模式)“查看结果树”,需要勾选“仅日志错误...

如何选择自动化测试框架

软件自动化测试,作为手工测试的替代,越来越受到关注。Pekka Klärck,作为Robot Framework的创建者和核心开发者,按照系统级别,介绍了几种不同的自动化测试方法的区别。 一、记录回放的方式流行于商业工具之中,无需编程技能即可快速上手。然而这种方法相对脆弱,一旦UI变化测试就会受到影响,分散的脚本不可重用且难以维护,而且系统在测试前必须可...

Unity3d 内置图形界面系统(Editor GUI)

一、说在前面的 1、unity内置的ui系统,无论是在性能的表现上、功能的强大性上、制作复杂ui的便捷性上,还是其它的一些方面都不如一些第三方的插件来的好,如:NGUI和DF-GUI(PS: 后者比前者要好很哦,推荐!))。 2、虽然UnityGUI不如某些第三方的插件,但是它在做一些简单的测试上,做数据高度上还是要方便一些的;而且如果你要做Inspect...

Java AES加密解密工具 -- GUI 、在线传输文件

原理 对于任意长度的明文,AES首先对其进行分组,每组的长度为128位。分组之后将分别对每个128位的明文分组进行加密。 对于每个128位长度的明文分组的加密过程如下: (1)将128位AES明文分组放入状态矩阵中。 (2)AddRoundKey变换:对状态矩阵进行AddRoundKey变换,与膨胀后的密钥进行异或操作(密钥膨胀将在实验原理七中详细讨论)。...