我需要发送的结构体
struct NetDataHeader_t { int nDataType; int nDataSize;};struct NetDataBase_t { NetDataHeader_t dataHeader; double hValue; double lValue; double temperature;};
我的运行函数
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 #include4 #include "sensordata.h" 5 #include 6 7 MainWindow::MainWindow(QWidget *parent) : 8 QMainWindow(parent), 9 ui(new Ui::MainWindow)10 {11 ui->setupUi(this);12 13 mySocket = new QTcpSocket();14 QObject::connect(mySocket, &QTcpSocket::readyRead, this, &MainWindow::MySocketReadData);15 QObject::connect(mySocket, &QTcpSocket::disconnected, this, &MainWindow::MySocketDisconnected);16 17 ui->btnSend->setEnabled(false);18 ui->lineEdit_IP->setText("127.0.0.1");19 ui->lineEdit_Port->setText("5000");20 }21 22 MainWindow::~MainWindow()23 {24 delete mySocket;25 delete ui;26 }27 28 void MainWindow::MySocketReadData()29 {30 QByteArray buffer;31 32 buffer = mySocket->readAll();33 struct NetDataBase_t myData;34 if(!buffer.isEmpty()) {35 char *src = buffer.data();36 memcpy(&myData, src, sizeof(struct NetDataBase_t));37 ui->textEdit_Recv->setText(QString("hValue:%1,lValue%2,temp:%3")38 .arg(QString::number(myData.hValue, 'g', 12))39 .arg(QString::number(myData.lValue, 'g', 12)).arg(myData.temperature));40 }41 }42 43 void MainWindow::MySocketDisconnected()44 {45 ui->btnSend->setEnabled(false);46 47 ui->btnConnect->setText("连接");48 qDebug()<<"Disconnected!";49 }50 51 void MainWindow::on_btnSend_clicked()52 {53 struct NetDataBase_t myData;54 myData.dataHeader.nDataSize = 1;55 myData.dataHeader.nDataSize = sizeof(struct NetDataBase_t) - sizeof(struct NetDataHeader_t);56 myData.hValue = -1.234567890;57 myData.lValue = 0.123456789;58 myData.temperature = 23.1;59 60 QByteArray data;61 data.resize(sizeof(struct NetDataBase_t));62 memcpy(data.data(), &myData, sizeof(struct NetDataBase_t));63 64 mySocket->write(data);65 mySocket->flush();66 }67 68 void MainWindow::on_btnConnect_clicked()69 {70 if(ui->btnConnect->text() == tr("连接")) {71 QString ip;72 int port;73 ip = ui->lineEdit_IP->text();74 port = ui->lineEdit_Port->text().toInt();75 76 mySocket->abort();77 mySocket->connectToHost(ip, port);78 if(!mySocket->waitForConnected(30000)) {79 qDebug()<<"Connection failed!";80 return;81 }82 qDebug()<<"Connect successfully!";83 84 ui->btnSend->setEnabled(true);85 ui->btnConnect->setText("断开连接");86 } else {87 mySocket->disconnectFromHost();88 ui->btnConnect->setText("连接");89 ui->btnSend->setEnabled(false);90 }91 }
同时使用QBytearray的data函数转换成字符串形式。
然后用memcpy进行复制和转换。
--------------------------------
或许还可以这样,没试过:把结构体转换成一个QString型的就可以write了,然后就可以了。
用QString::fromascii()去转换吧,或者是QString::fromlocal8bit()去转换