dialog.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include <QTimer> //定时器类
  4. #include <windows.h>
  5. #include<iostream>
  6. #include<qcursor.h>
  7. #include "infoserialize/infoserialize.h"
  8. #include <QJsonDocument>
  9. #include <QJsonObject>
  10. #include <QJsonValue>
  11. Dialog::Dialog(QWidget *parent) :
  12. QDialog(parent),
  13. ui(new Ui::Dialog)
  14. {
  15. // setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); // 去除边框和标题栏
  16. // 设置对话框属性
  17. // setWindowFlags(Qt::Dialog | Qt::WindowMinimizeButtonHint);
  18. QPushButton *minimizeButton = new QPushButton("隐藏", this);
  19. connect(minimizeButton, &QPushButton::clicked, this, &Dialog::on_minimizeButton_clicked);
  20. ui->setupUi(this);
  21. serailPort = new SerailPort();
  22. // serailPort->setUi(ui->RecvLineEdit);
  23. //
  24. // MyThread* mythread = new MyThread();
  25. // mythread->moveToThread(mythread);
  26. // mythread->start(); //调用子线程
  27. //从配置文件中恢复上次打开时的配置数据
  28. infoserialize myinfoserialize;
  29. QFile file("D:/irdet/cfg/prjpara.cfg");//.cfg文件为二进制文件
  30. if(!file.open(QIODevice::ReadOnly))
  31. {
  32. return ;
  33. }
  34. QDataStream output(&file);
  35. output >> myinfoserialize;
  36. file.close();
  37. QString qstrip = ui->IPLineEdit->text();
  38. QString qstraccount = ui->AcccountLineEdit->text();
  39. QString qstrpwd = ui->PwdLineEdit->text();
  40. ui->IPLineEdit->setText(myinfoserialize.qstrip);
  41. ui->AcccountLineEdit->setText(myinfoserialize.qstraccount);
  42. ui->PwdLineEdit->setText(myinfoserialize.qstrpwd);
  43. ui->SavePicDirLineEdit->setText(myinfoserialize.qstrdir);
  44. QStringList srtlistPorts = serailPort->getAllPorts();
  45. ui->PortcomboBox->addItems(srtlistPorts);
  46. QStringList srtlistBautRate = serailPort->getAllBautRate();
  47. ui->BautRatecomboBox->addItems(srtlistBautRate);
  48. //ui->BautRatecomboBox->setCurrentText("9600");
  49. ui->BautRatecomboBox->setCurrentText(myinfoserialize.srtBautRate);
  50. QStringList srtlistDataBit = serailPort->getAllDataBit();
  51. ui->DataBitcomboBox->addItems(srtlistDataBit);
  52. //ui->DataBitcomboBox->setCurrentText("8");
  53. ui->DataBitcomboBox->setCurrentText(myinfoserialize.srtDataBit);
  54. QStringList srtlistParityRate = serailPort->getAllParityRate();
  55. ui->ParityRatecomboBox->addItems(srtlistParityRate);
  56. ui->ParityRatecomboBox->setCurrentText(myinfoserialize.srtParity);
  57. QStringList srtlistStopRate = serailPort->getAllStopRate();
  58. ui->StopRatecomboBox->addItems(srtlistStopRate);
  59. ui->ParityRatecomboBox->setCurrentText(myinfoserialize.srtStop);
  60. ui->SendLineEdit->setText("SET@1=4000 #");
  61. ui->RecvLineEdit_2->setText("25000");
  62. ui->RecvLineEdit_3->setText("5000");
  63. ui->RecvLineEdit_4->setText("1000");
  64. connect(serailPort->serial, &QSerialPort::readyRead, serailPort, &SerailPort::readyRead);
  65. irdetnetproc();
  66. // //创建套接字对象
  67. // m_server = new QTcpServer(this);
  68. // //将套接字设置为监听模式
  69. // m_server->listen(QHostAddress::Any, 8018);
  70. // //通过信号接收客户端请求
  71. // connect(m_server, &QTcpServer::newConnection,
  72. // this, &Dialog::slotNewConnection);
  73. }
  74. void Dialog:: irdetnetproc()
  75. {
  76. //1.创建server对象
  77. QTcpServer* server=new QTcpServer(this);
  78. //2.设置服务器监听listen(ipAddr,port),这里跟红外检测算法服务通讯
  79. bool res=server->listen(QHostAddress::Any,8018);//返回监听成功与否,可能存在端口占用情况
  80. qDebug() << "this is listen ret:" << res;
  81. //3.基于 QTcpServer::newConnection() 信号检测是否有新的客户端连接
  82. connect(server,&QTcpServer::newConnection,[=]()
  83. {
  84. ptcpSocket=server->nextPendingConnection();//接收新的客户端连接,用于实际的收发处理
  85. qDebug() << "this is listen tcpSocket:" << ptcpSocket;
  86. //4.收发处理,
  87. //4.1 当收到数据请求时,tcpSocket会发射readyread信号
  88. connect(ptcpSocket,&QTcpSocket::readyRead,[=]()
  89. {
  90. //收到信息请求
  91. QByteArray data = ptcpSocket->readAll();
  92. qDebug()<<"Datas from the remote client:"<<data;
  93. //透传红外算法检测结果数据
  94. if(nullptr != ptcpSocket1)
  95. {
  96. ptcpSocket1->write(data);
  97. ptcpSocket1->flush(); // 确保数据被发送出去
  98. }
  99. });
  100. // //4.2 写数据
  101. // QByteArray sWriteMsg="Hello Client, i is irdet";
  102. // ptcpSocket->write(sWriteMsg);
  103. });
  104. QTcpServer* server1=new QTcpServer(this);
  105. //2.设置服务器监听listen(ipAddr,port),这里跟上位机通讯
  106. bool res1=server1->listen(QHostAddress::Any,9032);//返回监听成功与否,可能存在端口占用情况
  107. qDebug() << "this is listen ret:" << res;
  108. //3.基于 QTcpServer::newConnection() 信号检测是否有新的客户端连接
  109. connect(server1,&QTcpServer::newConnection,[=]()
  110. {
  111. ptcpSocket1=server1->nextPendingConnection();//接收新的客户端连接,用于实际的收发处理
  112. qDebug() << "this is listen tcpSocket:" << ptcpSocket1;
  113. //4.收发处理,
  114. //4.1 当收到数据请求时,tcpSocket会发射readyread信号
  115. connect(ptcpSocket1,&QTcpSocket::readyRead,[=]()
  116. {
  117. //收到信息请求
  118. QByteArray data = ptcpSocket1->readAll();
  119. qDebug()<<"Datas from the remote client:"<<data;
  120. QJsonDocument jsonDoc = QJsonDocument::fromJson(data);
  121. if (!jsonDoc.isNull()) {
  122. QJsonObject jsonObj = jsonDoc.object();
  123. QString interfaceType = jsonObj.value("interface").toString();
  124. if (interfaceType == "GrabPicture") {
  125. //解析出position
  126. QJsonObject paramObj = jsonObj.value("param").toObject();
  127. strposition = paramObj.value("position").toString();
  128. on_SendCmdButton_clicked();// 调用函数
  129. } else {
  130. qDebug() << "Unhandled interface type:" << interfaceType;
  131. }
  132. } else {
  133. qDebug() << "Received invalid JSON data";
  134. }
  135. });
  136. // //4.2 写数据
  137. // QByteArray sWriteMsg="Hello Client, i is irdet";
  138. // ptcpSocket->write(sWriteMsg);
  139. });
  140. }
  141. Dialog::~Dialog()
  142. {
  143. delete ui;
  144. }
  145. void Dialog::closeEvent ( QCloseEvent* e )
  146. {
  147. if( QMessageBox::question(this,
  148. tr("Quit"),
  149. tr("Are you sure to quit this application?"),
  150. QMessageBox::Yes, QMessageBox::No )
  151. == QMessageBox::Yes){
  152. e->accept();//不会将事件传递给组件的父组件
  153. if(nullptr != phkcamera)
  154. {
  155. phkcamera->logout();
  156. delete phkcamera;
  157. }
  158. //保存本次配置
  159. //QString strPortName = ui->PortcomboBox->currentText();
  160. QString srtBautRate = ui->BautRatecomboBox->currentText();
  161. QString srtDataBit = ui->DataBitcomboBox->currentText();
  162. QString srtParity = ui->ParityRatecomboBox->currentText();
  163. QString srtStop = ui->StopRatecomboBox->currentText();
  164. QString qstrip = ui->IPLineEdit->text();
  165. QString qstraccount = ui->AcccountLineEdit->text();
  166. QString qstrpwd = ui->PwdLineEdit->text();
  167. QString qstrdir = ui->SavePicDirLineEdit->text();
  168. infoserialize myinfoserialize;
  169. myinfoserialize.qstrip = qstrip;
  170. myinfoserialize.qstraccount = qstraccount;
  171. myinfoserialize.qstrpwd = qstrpwd;
  172. myinfoserialize.qstrdir = qstrdir;
  173. myinfoserialize.srtBautRate = srtBautRate;
  174. myinfoserialize.srtDataBit = srtDataBit;
  175. myinfoserialize.srtParity = srtParity;
  176. myinfoserialize.srtStop = srtStop;
  177. QFile file("./prjpara.cfg");
  178. if(!file.open(QIODevice::WriteOnly))
  179. {
  180. return ;
  181. }
  182. QDataStream input(&file);
  183. input << myinfoserialize;
  184. file.close();
  185. qDebug()<<"ok";
  186. }
  187. else
  188. e->ignore();
  189. }
  190. //void Dialog::on_pushButton_clicked()
  191. //{
  192. //}
  193. /*************************************
  194. 打开串口
  195. *************************************/
  196. void Dialog::on_OpenPortButton_clicked()
  197. {
  198. bool bPortStatus = serailPort->getPorStatus();
  199. //如果当前串口是打开状态则关闭
  200. if(bPortStatus)
  201. {
  202. serailPort->serial->close();
  203. serailPort->setPorStatus(false);
  204. //关闭串口成功后,使能参数选择框
  205. ui->PortcomboBox->setEnabled(true);
  206. ui->BautRatecomboBox->setEnabled(true);
  207. ui->DataBitcomboBox->setEnabled(true);
  208. ui->ParityRatecomboBox->setEnabled(true);
  209. ui->StopRatecomboBox->setEnabled(true);
  210. ui->OpenPortButton->setText("打开串口");
  211. return;
  212. }
  213. //设置串口名字
  214. QString strPortName = ui->PortcomboBox->currentText();
  215. serailPort->serial->setPortName(strPortName);
  216. //设置波特率
  217. QString srtBautRate = ui->BautRatecomboBox->currentText();
  218. int iBautRate = srtBautRate.toInt();
  219. serailPort->serial->setBaudRate(iBautRate);
  220. //设置数据位
  221. QString srtDataBit = ui->DataBitcomboBox->currentText();
  222. int iDataBit = srtDataBit.toInt();
  223. switch (iDataBit)
  224. {
  225. case 5:
  226. serailPort->serial->setDataBits(QSerialPort::Data5);
  227. break;
  228. case 6:
  229. serailPort->serial->setDataBits(QSerialPort::Data6);
  230. break;
  231. case 7:
  232. serailPort->serial->setDataBits(QSerialPort::Data7);
  233. break;
  234. case 8:
  235. serailPort->serial->setDataBits(QSerialPort::Data8);
  236. break;
  237. default:
  238. break;
  239. }
  240. //设置校验位
  241. QString srtParity = ui->ParityRatecomboBox->currentText();
  242. int iParityBitInx = ui->ParityRatecomboBox->currentIndex();
  243. //int iParityBit = srtParity.toInt();
  244. //"None", "Even", "Odd", "Mark", "Space"
  245. switch (iParityBitInx)
  246. {
  247. case 0://无校验
  248. serailPort->serial->setParity(QSerialPort::NoParity);
  249. break;
  250. case 1://偶校验
  251. serailPort->serial->setParity(QSerialPort::EvenParity);
  252. break;
  253. case 2://奇校验
  254. serailPort->serial->setParity(QSerialPort::OddParity);
  255. break;
  256. case 3://校验位始终为1
  257. serailPort->serial->setParity(QSerialPort::MarkParity);
  258. break;
  259. case 4://校验位始终为0
  260. serailPort->serial->setParity(QSerialPort::SpaceParity);
  261. break;
  262. default:
  263. serailPort->serial->setParity(QSerialPort::UnknownParity);
  264. break;
  265. }
  266. //停止位
  267. QString srtStop = ui->StopRatecomboBox->currentText();
  268. int iStopIndex = ui->StopRatecomboBox->currentIndex();
  269. //int iStop = srtStop.toInt();
  270. switch (iStopIndex)
  271. {
  272. case 0:
  273. serailPort->serial->setStopBits(QSerialPort::OneStop);
  274. break;
  275. case 1:
  276. serailPort->serial->setStopBits(QSerialPort::OneAndHalfStop);
  277. break;
  278. case 2:
  279. serailPort->serial->setStopBits(QSerialPort::TwoStop);
  280. break;
  281. }
  282. serailPort->serial->setFlowControl(QSerialPort::NoFlowControl);//设置流控
  283. //打开串口
  284. if(!serailPort->serial->QSerialPort::open(QIODevice::ReadWrite))
  285. {
  286. if(serailPort->serial->isOpen())
  287. {
  288. QMessageBox::information(this,"提示","打开串口",QMessageBox::Ok);
  289. }
  290. QMessageBox::information(this,"错误提示","无法打开串口",QMessageBox::Ok);
  291. return;
  292. }
  293. //打开串口成功后,去使能参数选择框
  294. ui->PortcomboBox->setEnabled(false);
  295. ui->BautRatecomboBox->setEnabled(false);
  296. ui->DataBitcomboBox->setEnabled(false);
  297. ui->ParityRatecomboBox->setEnabled(false);
  298. ui->StopRatecomboBox->setEnabled(false);
  299. serailPort->setPorStatus(true);
  300. ui->OpenPortButton->setText("关闭串口");
  301. }
  302. void Dialog::on_OpenButton_clicked()
  303. {
  304. QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
  305. phkcamera = new hkcamera();
  306. QString qstrip = ui->IPLineEdit->text();
  307. QString qstraccount = ui->AcccountLineEdit->text();
  308. QString qstrpwd = ui->PwdLineEdit->text();
  309. BOOL bconnect = phkcamera->connect(qstrip, 8000, qstraccount, qstrpwd);
  310. if(!bconnect){
  311. QApplication::restoreOverrideCursor();
  312. QMessageBox::critical(this,"错误","连接相机失败");//默认是模态的
  313. return;
  314. }
  315. HWND hWnd = (HWND)ui->DisplayLabel->winId(); //成功时,即可实时显示在该label上
  316. BOOL bdisplaypic = phkcamera->displaypic(hWnd);
  317. if(!bdisplaypic){
  318. QApplication::restoreOverrideCursor();
  319. QMessageBox::critical(this,"错误","连接相机成功,但预览失败");//默认是模态的
  320. return;
  321. }
  322. ui->OpenButton->setEnabled(false);
  323. ui->CloseButton->setEnabled(true);
  324. ui->SavePicButton->setEnabled(true);
  325. QApplication::restoreOverrideCursor();
  326. //QMessageBox::information(this,"成功","预览成功");//默认是模态的
  327. return;
  328. }
  329. void Dialog::on_SavePicButton_clicked()
  330. {
  331. //以当前时间作为文件名
  332. QDateTime datetime= QDateTime::currentDateTime();//获取系统当前的时间
  333. QString strtime = datetime.toString("yyyyMMddhhmmss");//格式化时间
  334. QString qstrdir = ui->SavePicDirLineEdit->text();
  335. qstrdir = QDir::fromNativeSeparators(qstrdir);
  336. while(qstrdir.endsWith('/')) //此处检测 /
  337. {
  338. qstrdir.chop(1); //删除最后一字节
  339. }
  340. QString qstrfilename = qstrdir + "/" + strtime + ".jpg";
  341. phkcamera->savepic(qstrfilename);
  342. }
  343. void Dialog::on_CloseButton_clicked()
  344. {
  345. phkcamera->stopdisplaypic();
  346. // if(nullptr != phkcamera)
  347. // {
  348. // phkcamera->logout();
  349. // delete phkcamera;
  350. // phkcamera = nullptr;
  351. // }
  352. ui->OpenButton->setEnabled(true);
  353. ui->CloseButton->setEnabled(false);
  354. }
  355. void Dialog::grabPicandRes()
  356. {
  357. QString qstrdirname = "D:/irdet/grabpic";
  358. //抓取图片
  359. //以当前时间作为文件名
  360. QDateTime datetime= QDateTime::currentDateTime();//获取系统当前的时间
  361. QString strtime = datetime.toString("yyyyMMddHHmmss");//格式化时间
  362. qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch(); //毫秒级
  363. QString msecsStr = QString::number(timestamp % 1000).rightJustified(3, '0');// 添加毫秒部分(最后三位)
  364. strtime += msecsStr;
  365. QString qstrfilename = qstrdirname + "/" + strtime + ".bmp";
  366. phkcamera->savepic(qstrfilename);
  367. //组装json格式的响应数据
  368. QJsonObject resultObj;
  369. resultObj["result"] = true;
  370. resultObj["msg"] = "操作成功";
  371. QJsonObject dataObj;
  372. dataObj["myGrabPicPath"] = qstrfilename;
  373. resultObj["data"] = dataObj;
  374. // 将整个响应包装在param中,但通常我们会将response作为独立的对象发送
  375. // 这里为了符合你的原始格式要求,我们仍然放在param中
  376. QJsonObject responseObj;
  377. responseObj["interface"] = "GrabPicture"; // 注意这里应该是正确的英文拼写
  378. responseObj["param"] = resultObj;
  379. QJsonDocument jsonDoc(responseObj);
  380. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented); // 使用缩进格式化JSON,便于调试
  381. //发送数据
  382. if(nullptr != ptcpSocket1)
  383. {
  384. ptcpSocket1->write(jsonData);
  385. ptcpSocket1->flush(); // 确保数据被发送出去
  386. }
  387. }
  388. void Dialog::on_SendCmdButton_clicked()
  389. {
  390. //采集一帧图片并返回上位机
  391. grabPicandRes();
  392. QString qstrsendpower = ui->SendLineEdit->text();
  393. printf("\r\n");
  394. std::cout <<qstrsendpower.toStdString()<< endl;//必须加endl才能输出
  395. printf("\r\n");
  396. //创建新文件夹
  397. QDir dir;
  398. //以当前时间作为文件名
  399. QDateTime datetime= QDateTime::currentDateTime();//获取系统当前的时间
  400. QString strtime = datetime.toString("yyyyMMddhhmmss");//格式化时间
  401. QString qstrdir = ui->SavePicDirLineEdit->text();
  402. qstrdir = QDir::fromNativeSeparators(qstrdir);
  403. while(qstrdir.endsWith('/')) //此处检测 /
  404. {
  405. qstrdir.chop(1); //删除最后一字节
  406. }
  407. QString qstrdirname = qstrdir + "/" + strtime;
  408. qDebug()<<qstrdirname;
  409. bool success = dir.mkdir(qstrdirname);
  410. if (!success) {
  411. qDebug() << "Failed to create directory!";
  412. QMessageBox::critical(this, tr("错误!"), tr("创建文件夹失败!"));
  413. return;
  414. }
  415. strnewidr = qstrdirname;
  416. //发送启动远程控制指令
  417. serailPort->sendtext("RUN@1=1#");
  418. //延迟1秒发送设置功率指令
  419. Sleep(1000);
  420. serailPort->sendtext(qstrsendpower);
  421. //获取加热时长,启动定时器超时后停止加热
  422. QString qstrheattimer = ui->RecvLineEdit_2->text();
  423. int iheatduration = qstrheattimer.toInt();
  424. hstopheattimerid = startTimer(iheatduration); //参数1 间隔 单位 毫秒
  425. //获取加热和降温时长,启动定时器超时后停止所有定时器
  426. QString qstrcooltimer = ui->RecvLineEdit_3->text();
  427. int ikillduration = iheatduration + qstrcooltimer.toInt();
  428. hkilltimerid = startTimer(ikillduration); //参数1 间隔 单位 毫秒
  429. //获取采样时长,并启动定时器
  430. QString qstsampletimer = ui->RecvLineEdit_4->text();
  431. int isampleduration = qstsampletimer.toInt();
  432. htimersampleid = startTimer(isampleduration); //参数1 间隔 单位 毫秒
  433. }
  434. void Dialog::timerEvent(QTimerEvent * ev)
  435. {
  436. //采样
  437. if(ev->timerId() == htimersampleid){
  438. qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch(); //毫秒级
  439. qint64 difference = timestamp - qiheatms;
  440. qDebug()<<"sample timer time out"<<difference;
  441. // qDebug()<<"difference"<<difference;
  442. //抓取图片
  443. //以当前时间作为文件名
  444. QDateTime datetime= QDateTime::currentDateTime();//获取系统当前的时间
  445. QString strtime = datetime.toString("yyyyMMddHHmmss");//格式化时间
  446. QString msecsStr = QString::number(timestamp % 1000).rightJustified(3, '0');// 添加毫秒部分(最后三位)
  447. strtime += msecsStr;
  448. QString qstrdir = ui->SavePicDirLineEdit->text();
  449. qstrdir = QDir::fromNativeSeparators(qstrdir);
  450. while(qstrdir.endsWith('/')) //此处检测 /
  451. {
  452. qstrdir.chop(1); //删除最后一字节
  453. }
  454. if((difference > 200) && (difference < 1200)){
  455. strtime = "F" + strtime;
  456. }
  457. // QString qstrfilename = qstrdir + "/" + strtime + ".bmp";
  458. QString qstrfilename = strnewidr + "/" + strtime + ".bmp";
  459. qDebug()<<qstrfilename;
  460. phkcamera->savepic(qstrfilename);
  461. // //4.2 写数据
  462. // if(nullptr != ptcpSocket)
  463. // {
  464. // ptcpSocket->write(qstrfilename.toLatin1());
  465. // }
  466. }
  467. //停止加热
  468. if(ev->timerId() == hstopheattimerid)
  469. {
  470. qDebug()<<"stop heat timer time out";
  471. //发送停止加热指令
  472. serailPort->sendtext("RUN@1=0#");
  473. // //停止定时器
  474. killTimer(hstopheattimerid);
  475. qiheatms = QDateTime::currentDateTime().toMSecsSinceEpoch(); //毫秒级
  476. // //4.2 写数据
  477. // if(nullptr != ptcpSocket)
  478. // {
  479. // ptcpSocket->write(qstrfilename.toLatin1());
  480. // }
  481. // m_client->w
  482. }
  483. //停止所有定时器
  484. if(ev->timerId() == hkilltimerid)
  485. {
  486. qDebug()<<"stop all timer time out";
  487. //停止所有定时器
  488. killTimer(htimersampleid);
  489. killTimer(hkilltimerid);
  490. //4.2 写数据
  491. if(nullptr != ptcpSocket)
  492. {
  493. QString strsend = strposition + "!" + strnewidr;
  494. ptcpSocket->write(strsend.toLatin1());
  495. ptcpSocket->flush(); // 确保数据被发送出去
  496. }
  497. }
  498. }
  499. //void Dialog::slotNewConnection()
  500. //{
  501. // if(m_client == NULL)
  502. // {
  503. // //处理客户端的连接请求
  504. // m_client = m_server->nextPendingConnection();
  505. // //发送数据
  506. // m_client->write("服务器连接成功!!!");
  507. // //连接信号, 接收客户端数据
  508. // connect(m_client, &QTcpSocket::readyRead,
  509. //this, &Dialog::slotReadyRead);
  510. // }
  511. //}
  512. //void Dialog::slotReadyRead()
  513. //{
  514. // //接收数据
  515. // QByteArray array = m_client->readAll();
  516. // QMessageBox::information(this, "Client Message", array);
  517. //}