#include "qextserialport.h" #include "dialog.h" #include "ui_dialog.h" #include Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); //! [0] #ifdef Q_OS_WIN ui->portBox->addItems(QStringList()<<"COM1"<<"COM2"<<"COM3"<<"COM4"); #else ui->portBox->addItems(QStringList()<<"/dev/ttyS0"<<"/dev/ttyS1"<<"/dev/ttyUSB0"<<"/dev/ttyUSB1"); #endif //make sure user can input their own port name! ui->portBox->setEditable(true); ui->baudRateBox->addItem("1200", BAUD1200); ui->baudRateBox->addItem("2400", BAUD2400); ui->baudRateBox->addItem("4800", BAUD4800); ui->baudRateBox->addItem("9600", BAUD9600); ui->baudRateBox->addItem("19200", BAUD19200); ui->baudRateBox->setCurrentIndex(3); ui->parityBox->addItem("NONE", PAR_NONE); ui->parityBox->addItem("ODD", PAR_ODD); ui->parityBox->addItem("EVEN", PAR_EVEN); ui->dataBitsBox->addItem("5", DATA_5); ui->dataBitsBox->addItem("6", DATA_6); ui->dataBitsBox->addItem("7", DATA_7); ui->dataBitsBox->addItem("8", DATA_8); ui->dataBitsBox->setCurrentIndex(3); ui->stopBitsBox->addItem("1", STOP_1); ui->stopBitsBox->addItem("2", STOP_2); ui->queryModeBox->addItem("Polling", QextSerialPort::Polling); ui->queryModeBox->addItem("EventDriven", QextSerialPort::EventDriven); //! [0] ui->led->turnOff(); timer = new QTimer(this); timer->setInterval(40); //! [1] PortSettings settings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10}; port = new QextSerialPort(ui->portBox->currentText(), settings, QextSerialPort::Polling); //! [1] connect(ui->baudRateBox, SIGNAL(currentIndexChanged(int)), SLOT(onBaudRateChanged(int))); connect(ui->parityBox, SIGNAL(currentIndexChanged(int)), SLOT(onParityChanged(int))); connect(ui->dataBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onDataBitsChanged(int))); connect(ui->stopBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onStopBitsChanged(int))); connect(ui->queryModeBox, SIGNAL(currentIndexChanged(int)), SLOT(onQueryModeChanged(int))); connect(ui->timeoutBox, SIGNAL(valueChanged(int)), SLOT(onTimeoutChanged(int))); connect(ui->portBox, SIGNAL(editTextChanged(QString)), SLOT(onPortNameChanged(QString))); connect(ui->openCloseButton, SIGNAL(clicked()), SLOT(onOpenCloseButtonClicked())); connect(ui->sendButton, SIGNAL(clicked()), SLOT(onSendButtonClicked())); connect(timer, SIGNAL(timeout()), SLOT(onReadyRead())); connect(port, SIGNAL(readyRead()), SLOT(onReadyRead())); setWindowTitle(tr("QextSerialPort Demo")); } Dialog::~Dialog() { delete ui; delete port; } void Dialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } void Dialog::onPortNameChanged(const QString & /*name*/) { if (port->isOpen()) { port->close(); ui->led->turnOff(); } } //! [2] void Dialog::onBaudRateChanged(int idx) { port->setBaudRate((BaudRateType)ui->baudRateBox->itemData(idx).toInt()); } void Dialog::onParityChanged(int idx) { port->setParity((ParityType)ui->parityBox->itemData(idx).toInt()); } void Dialog::onDataBitsChanged(int idx) { port->setDataBits((DataBitsType)ui->dataBitsBox->itemData(idx).toInt()); } void Dialog::onStopBitsChanged(int idx) { port->setStopBits((StopBitsType)ui->stopBitsBox->itemData(idx).toInt()); } void Dialog::onQueryModeChanged(int idx) { port->setQueryMode((QextSerialPort::QueryMode)ui->queryModeBox->itemData(idx).toInt()); } void Dialog::onTimeoutChanged(int val) { port->setTimeout(val); } //! [2] //! [3] void Dialog::onOpenCloseButtonClicked() { if (!port->isOpen()) { port->setPortName(ui->portBox->currentText()); port->open(QIODevice::ReadWrite); } else { port->close(); } //If using polling mode, we need a QTimer if (port->isOpen() && port->queryMode() == QextSerialPort::Polling) timer->start(); else timer->stop(); //update led's status ui->led->turnOn(port->isOpen()); } //! [3] //! [4] void Dialog::onSendButtonClicked() { if (port->isOpen() && !ui->sendEdit->toPlainText().isEmpty()) port->write(ui->sendEdit->toPlainText().toLatin1()); } void Dialog::onReadyRead() { if (port->bytesAvailable()) { ui->recvEdit->moveCursor(QTextCursor::End); ui->recvEdit->insertPlainText(QString::fromLatin1(port->readAll())); } } //! [4]