查看完整版本: [-- LibQQt系列之一 《QQtApplication》 --]

QTCN开发网 -> Qt代码秀 -> LibQQt系列之一 《QQtApplication》 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

drabel 2017-11-23 22:34

LibQQt系列之一 《QQtApplication》

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里面用宏分开了。
[size=font-size: 2rem,2rem]配置文件路径    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,配置文件会保存在这个路径。有的人认为这些设置没用,你不做完整的工程,这些功能你都用不到,你说没用,别的人可不会认为没用,你写写完整的工程试试,看看会不会没用。
[size=font-size: 2rem,2rem]初始化串口的使用#ifdef __EMBEDDED_LINUX__    system ( "rm -f /tmp/LCK..ttyS*" );#endif为什么要删除这个文件呢?如果不删除,在嵌入式linux设备上,你第二次打开程序如果和第一次打开程序间隔时间很短,如果不删除这个文件,就会提示串口正在被占用而打开失败。这句话是很重要的。删除这个LCK,每次开启程序保准打开串口成功。
[size=font-size: 2rem,2rem]设置语言    language = new QTranslator ( this );    setLanguage();这句话如果没有的话,你将无处更改语言,除非你重写每个内部类的event函数。
[size=font-size: 2rem,2rem]随机数初始化    qsrand ( QTime ( 0, 0, 0 ).secsTo ( QTime::currentTime() ) );这句话不必说太多,谁都明白,随机数最初必须设置一个种子,后来的qrand才不会出现重复现象。
[size=font-size: 2rem,2rem]隐藏鼠标#ifdef __EMBEDDED_LINUX__    //QApplication::setOverrideCursor(Qt::ArrowCursor);    QWSServer::setCursorVisible ( false );#endif在嵌入式平台上,必须经过此处设置鼠标不可见。可是你知道吗,这还不够,你必须修改Qt源代码,Qt源代码初始化鼠标的时候,对背景的重绘不科学,必须屏蔽掉那块代码,在嵌入式板子上才会真正的实现 开机看不到鼠标闪烁!
[size=font-size: 2rem,2rem]输入法初始化#ifdef __EMBEDDED_LINUX__    QQtInput::Instance()->Init ( "min", "control", "QQT", 14, 14 );#endif这个比较好理解,Qt在嵌入式屏幕上才开始开放KeyBoard版权,过去的时候都是自己写,找网络大牛买。
[size=font-size: 2rem,2rem]热插拔检测初始化#ifdef __PLUGINWATCHER__    QObject::connect ( QQtPluginWatcher::Instance(), SIGNAL ( storageChanged ( int ) ),                       this, SLOT ( slotUPanAutoRun ( int ) ) );#endif这条是有个功能需求,如果U盘查到设备上,要自动扫描升级包提醒用户进行设备升级。如果不需要把宏开关关掉。in qqt_header.pri

[size=font-size: 2rem,2rem]设置主题setQSSStyle()只有在这里设置QSS,才会全局更换主题,在别处,只是调用此处。因为你要把qss文件设置到QApplication才有意义。

[size=font-size: 2rem,2rem]设置App默认字体setTextFont这个和上一个原因一样。
好了,这就是QQtApplication。孩子们,不要觉得嵌入式开发简单,也不要被他吓住,一步步设置,一步步完成,肯定能开发出完美的专业应用的。

我表示论坛发帖子的 工具 太落后了,真的是不忍的说啊


查看完整版本: [-- LibQQt系列之一 《QQtApplication》 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled