diff options
Diffstat (limited to 'examples/terminal/mainwindow.cpp')
-rw-r--r-- | examples/terminal/mainwindow.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/examples/terminal/mainwindow.cpp b/examples/terminal/mainwindow.cpp new file mode 100644 index 00000000..0de3ace0 --- /dev/null +++ b/examples/terminal/mainwindow.cpp @@ -0,0 +1,111 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "console.h" +#include "settingsdialog.h" + +#include <QtWidgets/QMessageBox> +#include <QtAddOnSerialPort/serialport.h> + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + console = new Console; + console->setEnabled(false); + setCentralWidget(console); + + serial = new SerialPort(this); + settings = new SettingsDialog; + + ui->actionConnect->setEnabled(true); + ui->actionDisconnect->setEnabled(false); + ui->actionConfigure->setEnabled(true); + + initActionsConnections(); + + connect(serial, SIGNAL(readyRead()), this, SLOT(readData())); + connect(console, SIGNAL(getData(QByteArray)), this, SLOT(writeData(QByteArray))); +} + +MainWindow::~MainWindow() +{ + delete settings; + delete ui; +} + +void MainWindow::open() +{ + SettingsDialog::Settings p = settings->settings(); + serial->setPort(p.name); + if (serial->open(QIODevice::ReadWrite)) { + if (serial->setRate(p.rate) + && serial->setDataBits(p.dataBits) + && serial->setParity(p.parity) + && serial->setStopBits(p.stopBits) + && serial->setFlowControl(p.flowcontrol)) { + + console->setEnabled(true); + ui->actionConnect->setEnabled(false); + ui->actionDisconnect->setEnabled(true); + ui->actionConfigure->setEnabled(false); + ui->statusBar->showMessage(tr("Connected to %1 : %2, %3, %4, %5, %6") + .arg(p.name).arg(p.stringRate).arg(p.stringDataBits) + .arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl)); + + } else { + QMessageBox::critical(this, tr("Error"), + tr("Can't configure the serial port: %1,\n" + "error code: %2") + .arg(p.name).arg(serial->error())); + + ui->statusBar->showMessage(tr("Open error")); + } + } else { + QMessageBox::critical(this, tr("Error"), + tr("Can't opened the serial port: %1,\n" + "error code: %2") + .arg(p.name).arg(serial->error())); + + ui->statusBar->showMessage(tr("Configure error")); + } +} + +void MainWindow::close() +{ + serial->close(); + console->setEnabled(false); + ui->actionConnect->setEnabled(true); + ui->actionDisconnect->setEnabled(false); + ui->actionConfigure->setEnabled(true); + ui->statusBar->showMessage(tr("Disconnected")); +} + +void MainWindow::about() +{ + QMessageBox::about(this, tr("About Simple Terminal"), + tr("The <b>Simple Terminal</b> example demonstrates how to " + "use the QtSerialPort module in modern GUI applications " + "using Qt, with a menu bar, toolbars, and a status bar.")); +} + +void MainWindow::writeData(const QByteArray &data) +{ + serial->write(data); +} + +void MainWindow::readData() +{ + QByteArray data = serial->readAll(); + console->putData(data); +} + +void MainWindow::initActionsConnections() +{ + connect(ui->actionConnect, SIGNAL(triggered()), this, SLOT(open())); + connect(ui->actionDisconnect, SIGNAL(triggered()), this, SLOT(close())); + connect(ui->actionConfigure, SIGNAL(triggered()), settings, SLOT(show())); + connect(ui->actionClear, SIGNAL(triggered()), console, SLOT(clear())); + connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(about())); + connect(ui->actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt())); +} |