LibQQt系列之一 《QQtApplication》
来源:互联网 发布:网络语言暴力作文 编辑:程序博客网 时间:2024/06/17 20:45
Qt本身支持MIPS、ARM,我并没有说Qt不支持,
LibQQt存在的原因是你拿到了Qt并不代表你在那个平台上就能直接开发出完成的工业应用来。
开发一个App要解决的问题很多,Qt提供了通俗的框架,可是专业开发,要多Qt进行正确的使用。
LibQQt就解决这个正确使用的问题。作为一种Framework,LibQQt提供对Qt的一种正确的科学的使用方式。
好,说QQtApplication。
QApplication是程序的主入口调用的第一个类,为什么要对她进行继承和加入功能呢?
简单说来就是对整个App系统的初始化,细致说来QApplication提供了程序主入口的功能,但是设置谁来做呢?做在main函数里吗?如果你新作了一个App,也要用这些相同的设置怎么办?从main函数拷贝?还不如拷贝QQtApplication文件呢,里面设置全活的。
说QQtApplication的功能:
编码转换设置
#if QT_VERSION < QT_VERSION_CHECK(5,0,0) QTextCodec::setCodecForTr ( QTextCodec::codecForName ( "UTF-8" ) ); QTextCodec::setCodecForCStrings ( QTextCodec::codecForName ( "UTF-8" ) );#endif QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) );
上来就是这一句,这是做QtApp最重要的一段代码,设置系统的编码
在Qt当中,文件编码为UTF-8,tr当中使用英文,中文不允许在tr中使用,代码里的子串编码和解码问题全部通过CODE1 - UNICODE - CODE2,这样的形式进行解析,乱码的问题是不可能出现的。
这一句设置Qt系统编码的语句放在QtApplication当中,更换工程就可以直接拷贝QQtApplication源文件和头文件,
你相信不相信?如果你不设置这句话,linux系统下编码转换还正常的函数,到了windows下之后就乱码了。设置下,就不会乱码。如果你不相信可以尝试尝试,试错也是进步的。
Qt4函数有三个,Qt5只有一个。QQtApplication里面用宏分开了。
配置文件路径
QCoreApplication::setOrganizationName ( COMPANY_NAME ); QCoreApplication::setOrganizationDomain ( COMPANY_DOMAIN ); // 专为Mac OS X 准备的 QCoreApplication::setApplicationName ( PRODUCT_NAME ); QSettings::setPath ( QSettings::NativeFormat, QSettings::UserScope, CONFIG_PATH ); QSettings::setPath ( QSettings::NativeFormat, QSettings::SystemScope, CONFIG_PATH );
有些人真的认为这些设置都是多余的。
那么这个设置是什么意思呢?设置OrganizationName,配置文件会保存在这个子目录里,设置ApplicationName,配置文件的名字就是这个。SetPath,配置文件会保存在这个路径。
有的人认为这些设置没用,你不做完整的工程,这些功能你都用不到,你说没用,别的人可不会认为没用,你写写完整的工程试试,看看会不会没用。(在嵌入式板子上,Qt4.8.7,这个不设置会没有AppName, Qt5.9.2确有的。)
日志系统初始化
QQtApplication会把日志打印到终端,并且保存到日志,利用这条函数。一天保存一个文件。兼容Qt4、Qt5。
#ifdef __QQTLOGFILESUPPORT__#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) qInstallMsgHandler ( QQt4FrameMsgHandler );#else qInstallMessageHandler ( QQt5FrameMsgHandler );#endif#endif
初始化串口的使用
#ifdef __EMBEDDED_LINUX__ system ( "rm -f /tmp/LCK..ttyS*" );#endif为什么要删除这个文件呢?如果不删除,在嵌入式linux设备上,你第二次打开程序如果和第一次打开程序间隔时间很短,如果不删除这个文件,就会提示串口正在被占用而打开失败。这句话是很重要的。删除这个LCK,每次开启程序保准打开串口成功。
设置语言
language = new QTranslator ( this ); setLanguage();
这句话如果没有的话,你将无处更改语言,除非你重写每个内部类的event函数。
随机数初始化
qsrand ( QTime ( 0, 0, 0 ).secsTo ( QTime::currentTime() ) );
这句话不必说太多,谁都明白,随机数最初必须设置一个种子,后来的qrand才不会出现重复现象。
隐藏鼠标
#ifdef __EMBEDDED_LINUX__ //QApplication::setOverrideCursor(Qt::ArrowCursor); QWSServer::setCursorVisible ( false );#endif
在嵌入式平台上,必须经过此处设置鼠标不可见。可是你知道吗,这还不够,你必须修改Qt源代码,Qt源代码初始化鼠标的时候,对背景的重绘不科学,必须屏蔽掉那块代码,在嵌入式板子上才会真正的实现 开机看不到鼠标闪烁!
输入法初始化
#ifdef __EMBEDDED_LINUX__ QQtInput::Instance()->Init ( "min", "control", "QQT", 14, 14 );#endif
这个比较好理解,Qt在嵌入式屏幕上才开始开放KeyBoard版权,过去的时候都是自己写,找网络大牛买。
热插拔检测初始化
#ifdef __PLUGINWATCHER__ QObject::connect ( QQtPluginWatcher::Instance(), SIGNAL ( storageChanged ( int ) ), this, SLOT ( slotUPanAutoRun ( int ) ) );#endif
这条是有个功能需求,如果U盘查到设备上,要自动扫描升级包提醒用户进行设备升级。如果不需要把宏开关关掉。in qqt_header.pri
设置主题
setQSSStyle()
只有在这里设置QSS,才会全局更换主题,在别处,只是调用此处。因为你要把qss文件设置到QApplication才有意义。
设置App默认字体
setTextFont
这个和上一个原因一样。
好了,这就是QQtApplication。
孩子们,不要觉得嵌入式开发简单,也不要被他吓住,一步步设置,一步步完成,肯定能开发出完美的专业应用的。
- LibQQt系列之一 《QQtApplication》
- LibQQt系列之二《How to build LibQQt》
- LibQQt系列之三《Multi Link技术》
- LibQQt系列之四《一个应用案例》
- 软件思考系列之一
- 关于Midea系列之一
- 关于打印系列之一
- 关于vtable系列之一
- 关于产品系列之一
- gcc学习系列之一
- 《解剖PetShop》系列之一
- python学习系列之一
- 《解剖PetShop》系列之一
- 《解剖PetShop》系列之一
- 《解剖PetShop》系列之一
- 《解剖PetShop》系列之一
- 用户界面测试系列之一
- 思考系列之一
- 【3】用jsoup来实现简单的java爬虫-视频篇
- 《VC++深入详解》学习笔记---12章文件和注册表操作(2)
- 云星数据---Scala实战系列(精品版)】:Scala入门教程012-Scala实战源码-Scala操作符
- 2017年android常用的框架介绍
- 智慧城市什么样——城市治理“众‘智’成城”
- LibQQt系列之一 《QQtApplication》
- 关于写代码的注意事项之,全部英文注释,tab缩进换成四个空格的缩进,代码末尾不能有空格
- c++中输入和输出
- C++内存管理之泄露检查
- Qt for Mac点击dock事件处理
- 叉乘分配律的几何证明
- Cloudera 安装parcel hang的问题
- argparse
- TCP 实例