linux系统管理客户端2--串口实现测试代码编写


1、实现界面如下:

 

2、新建对话框窗口sDialog
3、设置ui格局如上图
4、将第三方类的文件加入项目中
5、将窗口配置文件的加入项目中

 

6、新建头文件如下:

#ifndef SDIALOG_H

#define SDIALOG_H

#include "qextSerialPort.h"

#include "win_qextserialport.h"

#include "comdialog.h"


#include <QDialog>


namespace Ui {

class sDialog;

}


class sDialog : public QDialog

{

    Q_OBJECT

    

public:

    explicit sDialog(QWidget *parent = 0);

    ~sDialog();




signals:                   

    void qtWin();

    void closeWin();



    

private:

    Ui::sDialog *ui;




private:

    QextSerialPort *myCom;              //使用第三方类定义对象

    comDialog *comWin;                  //使用自定义串口配置类对象

    bool isOpen;                        //判断串口是否被打开

    bool isLogin;                       //判断是否登录系统

    bool isClose;                       //判断是否关闭




private slots:

    void readMyCom();                   //读数据槽函数

    void sendData();                    //发送数据槽函数


    void comSetButton();                //串口配置槽函数

    void disConnectMyComButton();       //断开连接槽函数


    void scroll();                      //textBrowser光标移动槽函数



protected:

    void closeEvent(QCloseEvent *e);


};


#endif // SDIALOG_H


 

7、cpp源文件

 

#include "sdialog.h"

#include "ui_sdialog.h"

#include "qextserialport.h"


#include <QMessageBox>

#include <QCloseEvent>




sDialog::sDialog(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::sDialog)

{



    isLogin = false;

    isOpen = false;

    isClose = true;

    ui->setupUi(this);

    comWin = new comDialog;

    ui->sendButton->setDefault(true);

    ui->disConnectButton->setEnabled(false);

    this->setWindowFlags(Qt::WindowCloseButtonHint);

    this->setWindowFlags(Qt::WindowMaximizeButtonHint);

    this->setWindowFlags(Qt::WindowMinMaxButtonsHint);




    connect(ui->openButton,SIGNAL(clicked()),comWin,SLOT(exec()));              //打开串口配置对话框

    connect(ui->connectButton,SIGNAL(clicked()),this,SLOT(comSetButton()));     //串口连接

    connect(ui->sendButton,SIGNAL(clicked()),this,SLOT(sendData()));            //发送命令

    connect(ui->textBrowser,SIGNAL(textChanged()),this,SLOT(scroll()));         //光标滚动

    connect(ui->disConnectButton,SIGNAL(clicked()),this,SLOT(disConnectMyComButton())); //断开连接

    connect(this,SIGNAL(qtWin()),this,SLOT(disConnectMyComButton()));                   //自定义信号断开连接

    connect(this,SIGNAL(closeWin()),this,SLOT(accept()),Qt::QueuedConnection);          //使用排队方式连接信号emit语句后的代码将在发出信号后立即被执行

}




sDialog::~sDialog()

{

    delete ui;

}




//串口连接

void sDialog::comSetButton()

{

    myCom = new QextSerialPort(comWin->comPort,QextSerialBase::EventDriven);

    isOpen = myCom->open(QIODevice::ReadWrite);

    if(isOpen == true)

    {

        QMessageBox::information(this,"infor",tr("open success!"));

    }

    else

    {

        QMessageBox::information(this,"infor","open failure!");

        return;

    }

    ui->connectButton->setEnabled(false);

    ui->openButton->setEnabled(false);




    switch(comWin->comBaud)

    {

    case 0:

        myCom->setBaudRate(BAUD300);

        break;

    case 1:

        myCom->setBaudRate(BAUD600);

        break;

    case 2:

        myCom->setBaudRate(BAUD1200);

        break;

    case 3:

        myCom->setBaudRate(BAUD2400);

        break;

    case 4:

        myCom->setBaudRate(BAUD9600);

        break;

    case 5:

        myCom->setBaudRate(BAUD38400);

        break;

    case 6:

        myCom->setBaudRate(BAUD57600);

        break;

    case 7:

        myCom->setBaudRate(BAUD115200);

        break;

    case 8:

        myCom->setBaudRate(BAUD128000);

        break;

    case 9:

        myCom->setBaudRate(BAUD256000);

        break;

    }




    switch(comWin->comStopBit)

    {

    case 0:

        myCom->setStopBits(STOP_1);

        break;

    case 1:

        myCom->setStopBits(STOP_1_5);

        break;

    case 2:

        myCom->setStopBits(STOP_2);

        break;

    }


    switch(comWin->comDataBit)

    {

    case 0:

        myCom->setDataBits(DATA_5);

        break;

    case 1:

        myCom->setDataBits(DATA_6);

        break;

    case 2:

        myCom->setDataBits(DATA_7);

        break;

    case 3:

        myCom->setDataBits(DATA_8);

        break;

    }




    switch(comWin->comPariy)

    {

    case 0:

        myCom->setParity(PAR_NONE);

        break;

    case 1:

        myCom->setParity(PAR_ODD);

        break;

    case 2:

        myCom->setParity(PAR_EVEN);

        break;

    case 3:

        myCom->setParity(PAR_SPACE);

        break;

    case 4:

        myCom->setParity(PAR_MARK);

        break;

    }




    switch(comWin->comFlow)

    {

    case 0:

        myCom->setFlowControl(FLOW_OFF);

        break;

    case 1:

        myCom->setFlowControl(FLOW_HARDWARE);

        break;

    case 2:

        myCom->setFlowControl(FLOW_XONXOFF);

        break;

    }




    myCom->setTimeout(500);

//等待接收数据

    connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

}




//按行读取串口数据

void sDialog::readMyCom()

{

    char buf[512] = {0};

    if(0 <<span style=" color:#c0c0c0;"> myCom->readLine(buf,sizeof(buf)))

    {

        if(strchr(buf,'@') != NULL)                     //判断是否登录

        {

            ui->disConnectButton->setEnabled(true);

            if(isLogin)

            {

               QString str = "exit\n";

               myCom->write(str.toAscii());

               isLogin = false;

               ui->disConnectButton->setEnabled(false);

               myCom->close();

               ui->openButton->setEnabled(true);

               ui->connectButton->setEnabled(true);

            }

        }



        if(!isClose)

        {

            emit closeWin();

            return;

        }

            ui->textBrowser->insertPlainText(buf);

    }

}

//发送数据


void sDialog::sendData()

{

    if(isOpen)

    {

        QString str;

        str = ui->msgEdit->text()+"\n";

        myCom->write(str.toAscii());

        Sleep(50);

        ui->msgEdit->clear();

    }

    else

    {

        QMessageBox::information(this,"infor","can not open");

    }

}





void sDialog::scroll()

{

    ui->textBrowser->moveCursor(QTextCursor::End);

}


void sDialog::disConnectMyComButton()

{

    if(!isClose && !isOpen)

    {

        emit closeWin();

        return;

    }

    if(isOpen)

    {

        isLogin = true;

isOpen = false;

        QString str = "\n";

        myCom->write(str.toAscii());

    }

    else

    {

        QMessageBox::information(this,"infor","Has not open");

    }

}



//重写closeEvent拦截关闭按钮


void sDialog::closeEvent(QCloseEvent *e)

{

    if(QMessageBox::Yes == QMessageBox::information(this,"infor","Are you sure to close the window!",QMessageBox::Yes,QMessageBox::Cancel))

    {

        e->ignore();

        isClose = false;

        emit(qtWin());                         //发送自定义信号清理打开的系统

    }

    else

    {

        e->ignore();            

    }

}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值