本人介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推荐本文。

Qt 编程继续为大家讲解,还是接着文章Qt 编程点滴 初学者必看 (3) ,继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。

Qt 编程点滴 初学者必看 (4)(qt编程指南)  第1张

编译win32 中的 dll工程配置方法(以skypebackend为例):

因为工程中的代码全是标准C++的代码,所以编译方式跟Qt有点不一样,

Project-properties...-Project settings页中的"This is a custom Makefile"前面的方框不要勾选

Project-properties...-Build targets 右边中的"Type"设置为"Console application"(skypebackend为控制台程序)

Project-build options-Linker settings页,设置Link libraries内容为:(win32库文件)

  1. ..\..\..\..\MinGW\lib\librpcdce4.a
  2. ..\..\..\..\MinGW\lib\librpcns4.a
  3. ..\..\..\..\MinGW\lib\librpcrt4.a

按回车定位到下一焦点:

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));

项目翻译DEMO:

  1. #include
  2. #include
  3. #include
  4. intmain(intargc,char**argv)
  5. {
  6. QApplicationapp(argc,argv);
  7. QTranslatortranslator(0);//CreatesaQTranslatorobjectwithoutaparent
  8. translator.load("ttl_zh-cn",".");//Trytoloadafilecalledttl_zh-cn.qm
  9. app.installTranslator(&translator);//Addthetranslationsfromttl_zh-cn.qmtothepooloftranslations
  10. QPushButtonhello(QPushButton::tr("Helloworld!"),0);
  11. app.setMainWidget(&hello);
  12. hello.show();
  13. returnapp.exec();
  14. }

1.使用qmake -project生成.pro文件;

2.在.pro文件中加上如下语句:

  1. TRANSLATIONS=ttl_zh-cn.ts

3.运行如下命令:

  1. lupdatettl.pro

生成ttl_zh-cn.ts文件;(PS:.ts的名字来自“翻译源”(translation source))

4.运行如下命令:

  1. linguistttl_zh-cn.ts

这时候会弹出一个图形界面工具:

(1)单击左边窗口的QPushButton

(2)双击中间窗口的helloworld!这时会弹出一个对话框,在Translation下输入:你好世界!

(3)单击工具栏的Done and Next按钮(这个时候QPushButton的前面会变成绿色的对号)显示翻译完成

(4)然后File->Release,这个是生成.qm文件(.qm来自“QT消息”Qt message),保存到当前目录下,也可以使用命令release ttl_zh-cn.ts来生成.qm文件的。

(5)点击linguist“X”退出窗口,这个时候会提示保存ttl_zh-cn.ts文件,单击save,完成操作。

这一步的目的是把“你好世界!”来替代ttl_zh-cn.ts中的“unfinished”,这个只要了解就可以了,有兴趣的可以去看看Qt参考文档。

5.运行如下命令:

  1. qmakettl.pro

6.运行如下命令:

  1. make

7.运行如下命令:

  1. ./ttl

这个时候你会发现按钮是显示的是:“你好世界!” 而不是“helloworld!”

PS:lupdate和lrelease命令都可以带参数-verbose,这样会显示一些提示信息。这个 参数是可选的。

通过上面的步骤可以完成正常的翻译,但对象QLineEdit的右键菜单显示的还是英文,解决方法:把Qt\translations目录下的Qt_zh_CN.ts里面的内容全部拷到自己项目ts文件的后面就可以了(也就是把两个ts文件合并)

4字节空间存INT类型:

  1. #defineUSERGROUP_WIDTH5;
  2. charbuff[5];
  3. intgroupid=atoi(groupId.trimmed().toAscii().data());//得到GroupID的int值
  4. char*gid=(char*)(&groupid);//将groupid转化为char*类型
  5. memcpy(buff,gid,USERGROUP_WIDTH-1);
  6. charp[4];
  7. memset(buff,0,USERGROUP_WIDTH);
  8. memcpy(buff,p,USERGROUP_WIDTH-1);
  9. intgid=*((int*)(&buff));

错误信息:redefinition class...

请核对

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
0

上面两行中的名称是否一样(出现过第两行中最后一个"D"没掉, 找了N久才查出问题,汗~~~)

另一原因是变量定义不可放在.h文件中,如下

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
1

是一个变量 (不可放在.h文件中实现)

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
2

其中 MyStruct是一种类型,而mystruct是一个变量标准用法

在.h文件中

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
3

在.cpp中定义变量

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
4

窗体在执行destory()时,qapp对象就已经退出啦;

gsoap项目中的错误:multiple definition of `namespaces\\\'

解决方法:用gsoap中的工具生成的 nsmap文件(#include "UMPCServer.nsmap")引用不能写在.h中,应该要写在.cpp文件中;

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
5

上面的写法是正确的,不能写在a.h文件中,否则就会报错

删除TreeWidget结点:

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
6
  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
7

  1. connect(lineEdit1,SIGNAL(returnPressed()),lineEdit2,SLOT(setFocus()));
8

小结:本文主要介绍了在Qt 窗体的使用,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。

转载请说明出处
知优网 » Qt 编程点滴 初学者必看 (4)(qt编程指南)

发表评论

您需要后才能发表评论