自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt 編程點滴 初學者必看 (4)

移動開發(fā)
本人介紹的是Qt 編程點滴,作為一名新手,我建議必須看一看。編程那些事,只有編程人員自己明白!所以推薦本文。

Qt 編程繼續(xù)為大家講解,還是接著文章 Qt 編程點滴 初學者必看 (3) ,繼續(xù)介紹,說編程那些細節(jié)。由于本話題是一節(jié)一節(jié)為大家介紹的,所以更多內(nèi)容請看末尾編輯推薦。

編譯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內(nèi)容為:(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 

這個時候你會發(fā)現(xiàn)按鈕是顯示的是:“你好世界!”  而不是“helloworld!”

PS:lupdate和lrelease命令都可以帶參數(shù)-verbose,這樣會顯示一些提示信息。這個 參數(shù)是可選的。

通過上面的步驟可以完成正常的翻譯,但對象QLineEdit的右鍵菜單顯示的還是英文,解決方法:把Qt\translations目錄下的qt_zh_CN.ts里面的內(nèi)容全部拷到自己項目ts文件的后面就可以了(也就是把兩個ts文件合并)

4字節(jié)空間存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轉(zhuǎn)化為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 

上面兩行中的名稱是否一樣(出現(xiàn)過第兩行中最后一個"D"沒掉, 找了N久才查出問題,汗~~~)

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

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

是一個變量 (不可放在.h文件中實現(xiàn))

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

其中 MyStruct是一種類型,而mystruct是一個變量標準用法

在.h文件中

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

在.cpp中定義變量

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

窗體在執(zhí)行destory()時,qapp對象就已經(jīng)退出啦;

gsoap項目中的錯誤:multiple definition of `namespaces\\\'

解決方法:用gsoap中的工具生成的 nsmap文件(#include "UMPCServer.nsmap")引用不能寫在.h中,應該要寫在.cpp文件中;

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

上面的寫法是正確的,不能寫在a.h文件中,否則就會報錯

刪除TreeWidget結(jié)點:

  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  解決方法:去掉函數(shù)頭最后的";"  
  6.  
  7. GpsSideBar::IGPSNestData* GpsSideBar::resolveRecord(const QSqlRecord &record,const GpsSideBar::DataType &dateType )  
  8. {  

小結(jié):本文主要介紹了在Qt 窗體的使用,通過Qt 編程點滴介紹,也給自己提高了編程過程中需要注意的細節(jié)問題,由于本話題是一節(jié)一節(jié)為大家展現(xiàn)的,所以更多內(nèi)容,請看編輯推薦。

 
責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-17 14:29:55

Qt

2011-06-17 14:12:32

Qt

2011-06-17 15:06:14

Qt

2011-06-17 15:32:28

Qt

2011-06-17 15:19:28

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:44:25

Qt

2011-06-17 15:37:42

Qt

2011-06-17 14:41:56

Qt

2011-09-16 09:38:19

Emacs

2011-06-27 14:56:46

Qt Designer

2011-09-08 10:38:37

Widget

2011-08-24 17:05:01

Lua

2013-04-23 10:51:15

Linux壓縮

2011-08-04 18:01:07

IOS Cocoa Touc

2009-10-29 09:19:59

ADO.NET

2011-07-26 17:55:16

iPhone Runtime

2009-11-17 15:33:26

PHP數(shù)組元素

2009-10-22 16:46:03

VB.NET初步知識

2009-12-02 10:01:54

點贊
收藏

51CTO技術(shù)棧公眾號