本人最近因為專案新學qt,需要在qt上搭建個可以傳送16進製制顯示的二進位制陣列的tcp通訊。以前的開發平台是c#,這種陣列只要用byte陣列就可以,顯示方便。如今轉到c++平台,面對滿是指標的呼叫不知所措。qt中tcp通訊網上就很多了,這裡不再贅述。我們要說的是在:
qbytearry arry=tcpsoket->readall();
獲得的的是qbytearry陣列,其顯示的是ascii碼形式,而我通訊報文卻又是16進製制資料,如此對比起來比較麻煩。所以需要將獲得的陣列轉換為int型,如此才好對比。
在搜尋了好久之後,並沒有找到乙個直接合適的方法可準確地獲得想要的陣列。於是只能通過中間轉換了。即先將qbytearry轉換成qstring,再將qstring轉成16進製制int陣列,進行比較。我這裡使用了vector,所以需要#include才能呼叫。
qbytearrayda=m_tcpsocket->readall();//獲得陣列
qstring
strmessage=da.tohex();
intlen=strmessage.length();
vector
readm;//因為無法像c#一樣直接定義動態陣列,vector需要一下,這個readm就是我們所需要的int陣列了
而傳送時,將準確的16進製制陣列傳送,就要將int存入qbytearry了,for(int
i=0;i2;i++)
voidmainwindow::sendmessage()
;//所要傳送的報文
intsiz=sizeof(in)/sizeof(in[0]);
qbytearray
sendm=innitialqbytearry(in,siz);
m_tcpsocket->write(sendm);
}
qbytearrayinnitialqbytearry(int
in,int
len)//輸入int陣列和陣列長度,將陣列中的值存入qbytearry中
return
bytearry;
}東西比較容易,但本人新手,網上能搜尋到的解決方法比較少,所以花了不少時間。希望這個做出來能幫到後來者
Qt中的訊號和槽
訊號槽是qt中特有的概念。它使得程式設計師將不同的object繫結起來,而object物件間並不需要對相互了解。slots也是普通的c 方法,它們可以是virtual 可以被過載 可以使private protected public,可以像其它c 方法一樣有各種型別的引數,signals則無這些屬...
qt中destroyed和close視窗有什麼區別
qt的assistant中關於destroyed只有qobject類的該訊號,其中說的很清楚 物件被destroyed前將立即傳送該訊號,其不能夠被阻塞。該物件的所有子物件在訊號傳送以後會被立即銷毀。而qwidget與qwindow差不多都是釋放視窗相關資源。qwidget的close槽函式是像wi...
Qt中的訊號和槽
目錄 1 概念 2 自定義的訊號和槽 3 自定義的訊號和槽出現過載 4 qstring轉為char 5 lambda表示式 訊號和槽是用於將訊號傳送者與訊號處理者關聯起來 connect 訊號的傳送者,傳送的具體資訊,訊號的結束者,訊號的處理 槽 connect btn3,mypushbutton ...