mainwindow.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "QSerialPort"
  4. #include "QSerialPortInfo"
  5. #include "QMessageBox"
  6. #include "QDateTime"
  7. MainWindow::MainWindow(QWidget *parent)
  8. : QMainWindow(parent)
  9. , ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. //设置左右比例为2:8
  13. ui->splitter_left_right->setStretchFactor(0,2);
  14. ui->splitter_left_right->setStretchFactor(1,8);
  15. //设置上下比例为7:3
  16. ui->splitter_top_bot->setStretchFactor(0, 7);
  17. ui->splitter_top_bot->setStretchFactor(1, 3);
  18. scanSerialPort();
  19. baudInit();
  20. databitInit();
  21. stopbitInit();
  22. parityInit();
  23. serialPort = new QSerialPort(this);
  24. ui->checkBox_autoline->setChecked(true);
  25. ui->checkBox_timestamp->setChecked(true);
  26. portOpened = false;
  27. ui->pushButton_send->setEnabled(false);
  28. connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialPortReadyRead()));
  29. }
  30. MainWindow::~MainWindow()
  31. {
  32. delete ui;
  33. }
  34. void MainWindow::scanSerialPort()
  35. {
  36. foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
  37. ui->comboBox_port->addItem(info.portName());
  38. }
  39. }
  40. void MainWindow::baudInit()
  41. {
  42. QList <QString> list;
  43. list<<"1200"<<"2400"<<"4800"<<"9600"<<"19200"<<"38400"<<"57600"<<"115200";
  44. for (int i = 0; i < 8; i++) {
  45. ui->comboBox_baud->addItem(list[i]);
  46. }
  47. ui->comboBox_baud->setCurrentIndex(3);
  48. }
  49. void MainWindow::databitInit()
  50. {
  51. QList <QString> list;
  52. list<<"5"<<"6"<<"7"<<"8";
  53. for (int i = 0; i < 4; i++) {
  54. ui->comboBox_databit->addItem(list[i]);
  55. }
  56. ui->comboBox_databit->setCurrentIndex(3);
  57. }
  58. void MainWindow::stopbitInit()
  59. {
  60. QList <QString> list;
  61. list<<"1"<<"2";
  62. for (int i = 0; i < 2; i++) {
  63. ui->comboBox_stopbit->addItem(list[i]);
  64. }
  65. ui->comboBox_stopbit->setCurrentIndex(0);
  66. }
  67. void MainWindow::parityInit()
  68. {
  69. QList <QString> list;
  70. list<<"None"<<"Even"<<"Odd"<<"Space"<<"Mark";
  71. for (int i = 0; i < 5; i++) {
  72. ui->comboBox_parity->addItem(list[i]);
  73. }
  74. ui->comboBox_parity->setCurrentIndex(0);
  75. }
  76. void MainWindow::on_pushButton_open_clicked()
  77. {
  78. if (portOpened == false) {
  79. serialPort->setPortName(ui->comboBox_port->currentText());
  80. serialPort->setBaudRate(ui->comboBox_baud->currentText().toInt());
  81. switch (ui->comboBox_databit->currentText().toInt()) {
  82. case 5:
  83. serialPort->setDataBits(QSerialPort::Data5);
  84. break;
  85. case 6:
  86. serialPort->setDataBits(QSerialPort::Data6);
  87. break;
  88. case 7:
  89. serialPort->setDataBits(QSerialPort::Data7);
  90. break;
  91. case 8:
  92. serialPort->setDataBits(QSerialPort::Data8);
  93. break;
  94. default:
  95. break;
  96. }
  97. switch (ui->comboBox_stopbit->currentText().toInt()) {
  98. case 1:
  99. serialPort->setStopBits(QSerialPort::OneStop);
  100. break;
  101. case 2:
  102. serialPort->setStopBits(QSerialPort::TwoStop);
  103. break;
  104. default:
  105. break;
  106. }
  107. switch (ui->comboBox_parity->currentIndex()) {
  108. case 0:
  109. serialPort->setParity(QSerialPort::NoParity);
  110. break;
  111. case 1:
  112. serialPort->setParity(QSerialPort::EvenParity);
  113. break;
  114. case 2:
  115. serialPort->setParity(QSerialPort::OddParity);
  116. break;
  117. case 3:
  118. serialPort->setParity(QSerialPort::SpaceParity);
  119. break;
  120. case 4:
  121. serialPort->setParity(QSerialPort::MarkParity);
  122. break;
  123. default:
  124. break;
  125. }
  126. if (!serialPort->open(QIODevice::ReadWrite)) {
  127. QMessageBox::about(NULL, "错误", "串口打开失败");
  128. } else {
  129. portOpened = true;
  130. ui->comboBox_baud->setEnabled(false);
  131. ui->comboBox_databit->setEnabled(false);
  132. ui->comboBox_parity->setEnabled(false);
  133. ui->comboBox_port->setEnabled(false);
  134. ui->comboBox_stopbit->setEnabled(false);
  135. ui->pushButton_open->setText("关闭");
  136. ui->pushButton_send->setEnabled(true);
  137. }
  138. } else {
  139. // close serial port
  140. serialPort->close();
  141. portOpened = false;
  142. ui->comboBox_baud->setEnabled(true);
  143. ui->comboBox_databit->setEnabled(true);
  144. ui->comboBox_parity->setEnabled(true);
  145. ui->comboBox_port->setEnabled(true);
  146. ui->comboBox_stopbit->setEnabled(true);
  147. ui->pushButton_open->setText("打开");
  148. ui->pushButton_send->setEnabled(false);
  149. }
  150. }
  151. void MainWindow::on_pushButton_clean_recv_clicked()
  152. {
  153. ui->textBrowser->clear();
  154. }
  155. void MainWindow::on_pushButton_clean_send_clicked()
  156. {
  157. ui->textEdit->clear();
  158. }
  159. void MainWindow::on_pushButton_send_clicked()
  160. {
  161. QByteArray data = ui->textEdit->toPlainText().toUtf8();
  162. serialPort->write(data);
  163. serialPort->waitForBytesWritten(data.size());
  164. }
  165. void MainWindow::serialPortReadyRead()
  166. {
  167. QByteArray buf = serialPort->readAll();
  168. QString str;
  169. if (ui->checkBox_timestamp->isChecked()) {
  170. QDateTime cur = QDateTime::currentDateTime();
  171. str = cur.toString("[yy-MM-dd hh:mm:ss] ") + QString(buf);
  172. } else {
  173. str = QString(buf);
  174. }
  175. if (ui->checkBox_autoline->isChecked())
  176. ui->textBrowser->append(str);
  177. else
  178. ui->textBrowser->insertPlainText(str);
  179. }