qt开发环境 - 丑陋的串口助手
生活随笔
收集整理的這篇文章主要介紹了
qt开发环境 - 丑陋的串口助手
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
qt版本:5.9.1
win版本:10.1706
本助手改自qt自帶exmple中的terminal,去掉console相關(guān)內(nèi)容,加入button textbowser textedit,只改變了mainwindow
下面是代碼
/**************************************************************************** ** ** Copyright (C) 2012 Denis Shienkov <denis.shienkov@gmail.com> ** Copyright (C) 2012 Laszlo Papp <lpapp@kde.org> ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtSerialPort module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QtCore/QtGlobal>#include <QMainWindow>#include <QtSerialPort/QSerialPort>QT_BEGIN_NAMESPACEclass QLabel;namespace Ui { class MainWindow; }QT_END_NAMESPACEclass Console; class SettingsDialog;class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void openSerialPort();void closeSerialPort();void about();void writeData(const QByteArray &data);void readData();void handleError(QSerialPort::SerialPortError error);void on_pushButton_clicked();void clearTextBrowser(); private:void initActionsConnections();private:void showStatusMessage(const QString &message);Ui::MainWindow *ui;QLabel *status;Console *console;SettingsDialog *settings;QSerialPort *serial; };#endif // MAINWINDOW_H/**************************************************************************** ** ** Copyright (C) 2012 Denis Shienkov <denis.shienkov@gmail.com> ** Copyright (C) 2012 Laszlo Papp <lpapp@kde.org> ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtSerialPort module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/#include "mainwindow.h" #include "ui_mainwindow.h" //#include "console.h" #include "settingsdialog.h"#include <QMessageBox> #include <QLabel> #include <QtSerialPort/QSerialPort>//! [0] MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) { //! [0]ui->setupUi(this); // console = new Console; // console->setEnabled(false); // setCentralWidget(console); //! [1]serial = new QSerialPort(this); //! [1]settings = new SettingsDialog;ui->actionConnect->setEnabled(true);ui->actionDisconnect->setEnabled(false);ui->actionQuit->setEnabled(true);ui->actionConfigure->setEnabled(true);status = new QLabel;ui->statusBar->addWidget(status);initActionsConnections();connect(serial, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error),this, &MainWindow::handleError);//! [2]connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData); //! [2] // connect(console, &Console::getData, this, &MainWindow::writeData); //! [3] } //! [3]MainWindow::~MainWindow() {delete settings;delete ui; }//! [4] void MainWindow::openSerialPort() {SettingsDialog::Settings p = settings->settings();serial->setPortName(p.name);serial->setBaudRate(p.baudRate);serial->setDataBits(p.dataBits);serial->setParity(p.parity);serial->setStopBits(p.stopBits);serial->setFlowControl(p.flowControl);if (serial->open(QIODevice::ReadWrite)) { // console->setEnabled(true); // console->setLocalEchoEnabled(p.localEchoEnabled);ui->actionConnect->setEnabled(false);ui->actionDisconnect->setEnabled(true);ui->actionConfigure->setEnabled(false);showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6").arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits).arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));} else {QMessageBox::critical(this, tr("Error"), serial->errorString());showStatusMessage(tr("Open error"));} } //! [4]//! [5] void MainWindow::closeSerialPort() {if (serial->isOpen())serial->close(); // console->setEnabled(false);ui->actionConnect->setEnabled(true);ui->actionDisconnect->setEnabled(false);ui->actionConfigure->setEnabled(true);showStatusMessage(tr("Disconnected")); } //! [5]void MainWindow::about() {QMessageBox::about(this, tr("About Simple Terminal"),tr("The <b>Simple Terminal</b> example demonstrates how to ""use the Qt Serial Port module in modern GUI applications ""using Qt, with a menu bar, toolbars, and a status bar.")); }//! [6] void MainWindow::writeData(const QByteArray &data) {serial->write(data); } //! [6]//! [7] void MainWindow::readData() { // QByteArray data = serial->readAll();// console->putData(data);QByteArray temp = serial->readAll();QString buf;if(!temp.isEmpty()){buf = temp;ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);ui->textBrowser->moveCursor(QTextCursor::End);}} //! [7]//! [8] void MainWindow::handleError(QSerialPort::SerialPortError error) {if (error == QSerialPort::ResourceError) {QMessageBox::critical(this, tr("Critical Error"), serial->errorString());closeSerialPort();} } //! [8]void MainWindow::initActionsConnections() {connect(ui->actionConnect, &QAction::triggered, this, &MainWindow::openSerialPort);connect(ui->actionDisconnect, &QAction::triggered, this, &MainWindow::closeSerialPort);connect(ui->actionQuit, &QAction::triggered, this, &MainWindow::close);connect(ui->actionConfigure, &QAction::triggered, settings, &SettingsDialog::show);connect(ui->actionClear, &QAction::triggered, this, &MainWindow::clearTextBrowser);connect(ui->actionAbout, &QAction::triggered, this, &MainWindow::about);connect(ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt); }void MainWindow::showStatusMessage(const QString &message) {status->setText(message); }void MainWindow::on_pushButton_clicked() {serial->write(ui->textEdit->toPlainText().toLatin1()); }void MainWindow::clearTextBrowser() {ui->textBrowser->setText(NULL); }
總結(jié)
以上是生活随笔為你收集整理的qt开发环境 - 丑陋的串口助手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 河洛群侠传擎天寨任务怎么做 河洛群侠传擎
- 下一篇: 身份证随机产生,身份证校验