Qt 编程点滴 初学者必看 (4)
创始人
2024-08-01 02:11:30
0

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

编译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. int main( int argc, char **argv )  
  5. {  
  6.     QApplication app( argc, argv );  
  7.     QTranslator translator( 0 );//Creates a QTranslator object without a parent  
  8.     translator.load( "ttl_zh-cn", "." );//Try to load a file called ttl_zh-cn.qm  
  9.     app.installTranslator( &translator );//Add the translations from ttl_zh-cn.qm to the pool of translations  
  10.     QPushButton hello( QPushButton::tr( "Hello world!" ), 0 );  
  11.     app.setMainWidget( &hello );  
  12.     hello.show();  
  13.     return app.exec();  

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

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

 

  1. TRANSLATIONS    = ttl_zh-cn.ts 

3.运行如下命令:

  1. lupdate ttl.pro 

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

4.运行如下命令:

  1. linguist ttl_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. qmake ttl.pro 

6.运行如下命令:

  1. make 

7.运行如下命令:

  1. ./ttl 

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

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

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

4字节空间存INT类型:

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

错误信息:redefinition class...

请核对

  1. #ifndef IGPSINTERACTION_H_INCLUDED  
  2. #define IGPSINTERACTION_H_INCLUDED 

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

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

  1. struct mystruct{  
  2.   ...    
  3. }; 

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

  1. typedef struct MyStruct{  
  2.  ....  
  3. }mystruct; 

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

在.h文件中

  1. typedef struct MyStruct{  
  2.  ....  
  3. }; 

在.cpp中定义变量

  1. struct MyStruct mystruct;  
  2. std::string 转QString:  
  3. std::string  groupName = \\\'abcdef\\\';  
  4. const char *groupNamegroupNameCh = groupName.c_str();  
  5. QString tmpStr = QObject::tr(groupNameCh);     

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

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

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

  1. a.cpp:  
  2. #include "UMPCServer.nsmap" 

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

删除TreeWidget结点:

  1. void MainWindow::clearTreeWidget()  
  2. {  
  3.     while ( treeWidget->topLevelItemCount() > 0 )  
  4.     {  
  5.         QTreeWidgetItem *parentItem = treeWidget->takeTopLevelItem(0);  
  6.         QList list = parentItem->takeChildren ();  
  7.  
  8.         for (int j = 0; j < list.size(); j++)  
  9.         {  
  10.             QTreeWidgetItem *childItem = list.at(j);  
  11.             delete &nodeItemData(childItem);  
  12.             delete childItem;  
  13.         }  
  14.         delete &nodeItemData(parentItem);  
  15.         delete parentItem;  
  16.  
  17.     }  
  18.  
  1. IGPSNestData* resolveRecord(const QSqlRecord &record,const DataType &dateType )  
  2. error: expected `,\\\' or `...\\\' before \\\'&\\\' token   
  3. 解决方法 #include  

 

  1. GpsSideBar::IGPSNestData* GpsSideBar::resolveRecord(const QSqlRecord &record,const GpsSideBar::DataType &dateType );  
  2. {  
  3. }  
  4. error: declaration of `GpsSideBar::IGPSNestData* GpsSideBar::resolveRecord(const QSqlRecord&, const GpsSideBar::DataType&)\\\' 
  5. outside of class is not definition  解决方法:去掉函数头最后的";"  
  6.  
  7. GpsSideBar::IGPSNestData* GpsSideBar::resolveRecord(const QSqlRecord &record,const GpsSideBar::DataType &dateType )  
  8. {  

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

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...