QT 界面數據顯示


問題是這樣的:
我的QT程序調用外部程序所獲得的數據與外部程序單獨運行時輸出的值不一樣
比如:外部程序單獨運行輸出 0 0 12 0,而在QT中調用時通過將接收到的QByteArray對象轉換為QStringList,再通過at()訪問,得到的數據為 0 -1 11 2,這可能是因為什么導致的呢?

11 个解决方案

#1


可能是編碼不一致
在QByteArray轉換成QString的時候指定編碼

#2


這個它有時候對,有時候不對,應該不是編碼問題吧,不過我還是先試試看

#3


精度問題? 
貼下代碼看看。

#4


編碼問題,bytearray采用的是字節形式的編碼,和一般的不一樣

#5


兩種可能:
1、編碼問題,樓上幾位已經說了
2、轉換的問題,可能收到的數據是無符號的數據,但是轉換的時候你轉成了有符號的了。最好把那段代碼貼出來看看。

#6


首先,很感謝樓上各位的回帖,你們提出的出問題的可能性我也認真考慮了,現在貼出代碼如下:

構造函數中相關代碼:
{
 m_bash = new QProcess;
 m_bash->setReadChannelMode(QProcess::MergedChannels);
    
 connect(m_bash,SIGNAL(readyReadStandardOutput()),this,SLOT(showOutput()));
 m_bash->start("sh",QIODevice::ReadWrite); 
}
構造函數中用到的槽函數,也就是label的顯示值設置:
void Dialog::showOutput()
{
    QByteArray bytes=m_bash->readAllStandardOutput();
    QStringList text=QString(bytes).split("\n");
    
    lineEditY1->setText(text.at(0));
    lineEditJ5->setText(text.at(1));
    lineEditJ1->setText(text.at(2));
    lineEditF5->setText(text.at(3));
    lineEditF2->setText(text.at(4));
    lineEditF1->setText(text.at(5));
    lineEditZE->setText(text.at(6));
    lineEditJB->setText(text.at(7));
    lineEditZS->setText(text.at(8));
}

再說一下出現的狀況:
並不是每次輸出都出現錯誤,所以我想應該不是編碼問題
還是希望能得到大家的提示,謝謝了~

#7


樓主調試的時候看過收到的bytes是什么數據嗎?我懷疑你這讀取的就有問題,你試過bash->readdata()函數嗎?你試一試,看看兩次接收的結果是不是一樣。

#8


感覺是編碼問題,解決

#9


這個我之前遇到一次,當時使用cast是出了問題。如果你想驗證,最好使用build-in的C/C++數據類型,memcopy出原始數據,然后進行轉換,通常是可以的,我當時是這么解決問題的。
我覺得有時候不能完全太相信Qt,呵呵~~~
個人感覺,僅供參考。

#10



// clear your bytes contents first 
QByteArray bytes=m_bash->readAllStandardOutput();
// print out the data from bytes
 QStringList text=QString(bytes).split("\n");
// print out the data from text.

注釋地方加上你的打印輸出內容。
這個可能是因為當調用slot函數時,緩存並沒有被清空,發生順序不對。
在每次讀取標准輸出前,先清空你的QByteArray。

#11


應該是編碼的問題

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: