先安装,(知道怎么安装吧?先安装SETUP,最后一步不点NEXT,后安装升级版,如果是window7,15版本不行,就要安装21版本的)。好像没有中文版的,我用的是英文版15的。有一个要填的“student name”写你的名字就可以。
然后运行,如果是做线性规划的题,就在菜单栏“Module”里选择Linear programming",然后从自动出现的File里选择“new”,出现一个方框,
“number constraints”是约束条件的个数,右边小方格的数字,是可以修改的,有几个约束条件就写几
“number variables”变量的个数,等等,你设了几个,就把右边的数字改成几。求目标函数最大值就选Maximan,最小值就选Miniman,然后点“OK”
进入编辑状态时,其中,X1,X2,…在编辑状态都是改的,比如双下标Xa1, Xa2,Xb1,Xb2等等。
表格第一列,有Max,或Min,的是目标函数,表格里的数字都是X1,X2,…Xn,的系数,如果是负的,就加上负号。
在写约束条件时,≥,=,≤符号都是可以选择的。
如果发现,要增加或减少约束条件,或是增加或减少变量个数,都可以在菜单栏“Edit”里插入或删除行或者列, 注意:要增加约束条件是,把鼠标定在一个格子里,再Insert行时,“new constraint”是出现在鼠标的下一行的,增加列时,是出现在鼠标的后一列的。
如果,目标函数和约束条件都输入了,然后点表格顶上的“solve”,然后表格的下方和右边就出现了运行结果。
如果,发现运行结果不对,那就再点表格顶上的“Edit”,就进入了编辑状态,可以修改自己约束条件,或目标函数。这样,可以反复修改,反复运行。
要保存时,点File里save as,文件都是“lin”格式的,比如说,一个例题213,可以保存为“213lin”,在保存对话框里,可以选择自己要保存的位置。
QLY-v79mL%21J3V03edyoVc9Kbd6I39tijianscykxycn#%21GtqBd85uZ%25XFVtLoavqvbvEn2trlXs6uKxmjFtxt%21K2Hi7tIuH0Funv1这个代码没有找到相关的头绪,建议把问题详细说明一下国际化是指在代码设计上加入能方便的移植到其他国家和地区的特性。而本地化是指将具有国际化支持的代码翻译成本国或地区的语言,是本地用户更容易使用。 I18n是Internationalization的简写,l10n是Localization的简写。
在Qt中创建可以国际化的代码
最常见的是将要翻译的字符串加上tr语句,tr语句的标准语法是:
Context::tr(sourceText,comment), 比如 QString str2 = QTextEdit::'''tr'''(“Letter”,”paper size”);
Context(上下文)和comment(注释)是可以省略的,它们的意思分别是 Context:用于指明该翻译文字所在的上下文,一般为类名。因为同样的一个字串在不同的环境中翻译出来是不一样的,比如都是死,皇帝是崩,普通老百姓就是死翘。 comment: 用于指明要翻译文字的一个注释。因为作翻译的可能并不是写代码的人。比如spring既有d簧的意思,又有春天的意思。designer里面选组建的时候,有一个blue spring(蓝色的d簧)是用于addStretch()的,如果没加说明,有可能被翻译成蓝色的春天。
在写代码的时候,我们可能希望把所有的字符串都放在一个地方,而方便于我们自己集中作改动。真正用到的时候,用一个字符常量指针去访问。那么我们可能想到这样写代码
// Wrong,这种实现Qt不认识,无法作翻译
const char appName=“OpenDrawer 2D”;
QString translated=tr(appName);
//ok, 需要使用QT_TR_NOOP字串来提醒Qt系统该翻译的字串
const char appName=QT_TR_NOOP(“OpenDrawer 2D”);
QString translated=tr(appName);
QT_TR_NOOP的语法是QT_TR_NOOP(sourceText),它还有两个变体,语法如下
QT_TRANSLATE_NOOP ( context, sourceText )
QT_TRANSLATE_NOOP3 ( context, sourceText, comment )
对应介绍的context和comment,其意思应该不难理解
还有一种情况是在一个字串中有一部分来源于变量。那我们看看两种正误的写法
// wrong 这种写法无法被正确识别
statusBar()->showMessage('''tr'''(“Host ” + hostName+“ found”);
//ok 利用了QString的arg()函数。在翻译时,需保留%1
statusBar()->showMessage('''tr'''(“Host %1 found”)arg(hostName)
在书写了含可翻译语句的程序后,我们来看看如何生成翻译文件
生成翻译文件
首先要修改pro工程文件,比如在apppro里加入
TRANSLATIONS+=app_ents app_zh_CNts app_zh_TWts #后面你可以加你想要翻译的各种版本
CONFIG += localize_deployment
SYMBIAN_SUPPORTED_LANGUAGES += zh_CN
SYMBIAN_LANGzh_CN = 31
注:其中SYMBIAN_SUPPORTED_LANGUAGES ,SYMBIAN_LANGzh_CN 两行是localize_deploymentprf 中缺少的两行,简体中文qs 文件只使用语言代号zh时 与系统解析的" 语言_区域"区域格式不符,请先这样设置。
然后在shell, 里执行如下语句( 在Qt SDK 中请打开Qt for Desktop的命令行,目前lupdate 命令没有为Qt for symbian生成的版本)
$ lupdate apppro
$ linguist app_zh_CNts
$linguist app_zh_TWts
$ lrelease ts
$ lupdate apppro #会根据pro里指示的内容,生成app_zh_CNts和app_zh_TWts $ linguist app_zh_CNts 翻译其中一个文件,linguist是一个图形化的工具, $linguist app_zh_TWts 翻译另一个, $ lrelease ts 将ts文本文件转换成qm二进制文件,会生成app_zh_CNqm和app_zh_TWqm,方便应用加载
ts 是Text String的缩写;qm是Qt Message的缩写所以翻译文件生成的流程就是 cpp —> ts —>qm lupdate是负责找出qt源代码中需要翻译的字符串的。会搜tr/QT_TR_NOOP/QT_TRANSLATE_NOOP /QT_TRANSLATE_NOOP3等语句 linguist是手动翻译ts文件的一个工具,真正加入本地语言是在这一步 lrelease是将ts转换成qm的一个工具。需要提醒一下的,lupdate生成的ts文件不会覆盖掉已经翻译过的ts文件,只会更新其中的内容。所以其名字为languange update
有了翻译文件,我们看看系统是怎么加载翻译文件的。
加载翻译文件
一个例子,很简单的说明问题
QTranslator qt_translator;
QTranslator app_translator;
if( usersettingslanguage == SimpleChinese ) {
// Qt’s own translations
qt_translatorload("qt_zh");
qApp->installTranslator( &qt_translator );
// application translation
app_translatorload("myprogram_zh");
qApp->installTranslator( &app_translator );
}
这里,我们看到有两个翻译加载器,其中一个是加载应用程序的翻译文件,也就是我们在第二个步骤中生成的文件。另外一个是Qt系统的翻译文件,比如 Qt的版权信息,designer的一些菜单等,名字叫qt_后带一个语言版本。
有时候我们在系统启动的时候,就需要判断本地的语言,然后加载不同的翻译文件,那么代码就是如下结构
QString locale = QLocale::system()name();
QTranslator translator;
translatorload(QString("trollprint_") + locale);
appinstallTranslator(&translator);
在pro文件中部署qm文件,使得在symbian系统下能方便的检索到qm文件,而不用再load方法中设置路径
symbian: {
addFilessources = helloworld_ents helloworld_zh_CNqm helloworld_zh_TWqm helloworld_zh_HKqm
addFilespath =
DEPLOYMENT += addFiles
}
本地设置的语言,和我们的qm前面部分并不完全一样,有一个qm查询的过程,假如本地字语言名字是fr_CAISO8859-15,加载程序会按照 trollprint_fr_CAISO8859-15qm,trollprint_fr_CAqm,trollprint_frqm顺序来加载,如果以上都没有,将使用默认的语言
一个极其简单的例子 //maincpp
int main(int argc, char argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translatorload("hellotr_zh");
appinstallTranslator(&translator);
QPushButton hello(QPushButton::tr("Hello world!"));
helloresize(100, 30);
helloshow();
return appexec();
}
本地化中文例程:File:HelloWorldzip, 语言代码可以在ISO 639-1 codes中找到(two-letter ISO 639 language code)。
远程编译
远程编译需要在pro文件中如下声明ts qm,否则远程编译器找不到 ts和 qm 文件
OTHER_FILES += helloworld_ents helloworld_zh_CNts helloworld_enqm helloworld_zh_CNqm
参见Remote Compiler troubleshooting
相关文档
Internationalization with Qt
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)