最近在使用Qt做项目过程中,代码中有用到qApp,下面就来详细讲讲
一、qApp的定义
#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
由此可见,qApp是一个宏。
再来看看这个宏,其表示值是一个强制转成QAppllication类型的QCoreApplication这个类的单例对象指针。
这个全局qApp指针指向的就是我们代码中调用QApplication::QApplication(int &argc, char **argv) 构造的一个应用程序对象。
二、qApp的使用
清楚qApp是个宏定义指向应用程序对象的指针后,下面就来讲讲在具体代码中该指针可以调用哪些函数了
QString trans;
trans = qApp->translate("EnvCtrlInfo", sigDesMap.value(ioConf.inSignal[0]).toUtf8().data(), 0, QApplication::UnicodeUTF8);
ui->label->setText(trans);
此处先只讲qApp调用的文本处理函数translate()来实现翻译功能
QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, int n )
- context :上下文,一般就是需要翻译的字符串所在的类的名字
- sourceText: 需要翻译的字符串。(我们关注的编码其实就是它的编码)
- disambiguation:消除歧义用的。(比如我们的类内出现两处"close",一处含义是关闭,另一处含义是亲密的。显然需要让翻译人员知道这点区别)
- encoding:指定编码。它有两个值
-
CodecForTr 使用setCodecForTr()设置的编码来解释 sourceText
- UnicodeUTF8 使用utf8编码来解释 sourceText
- 其实这两个分别对应tr和trUtf8
-
- n :处理单复数(对中文来说,不用考虑这个问题)