Qt制作的读写器专用测试工具软件

本文档详细介绍了如何使用Qt框架开发一个读写器专用测试工具,包括新建无UI的Widget文件来保存动态库接口,添加动态库和头文件,创建多个功能页面如串口控制、时钟等,以及构建主窗口和页面切换。同时,讨论了在Qt中获取和设置文本的相关知识,如QLineEdit和QComboBox的使用。
摘要由CSDN通过智能技术生成

制作流程:

1、新建一个不带ui的widget文件,用句柄保存动态库的接口(伪单列模式)

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <AFCReader.h>
#include <form.h>
#include <conafc.h>
#include <slecom.h>

class Widget : public QWidget
{
    Q_OBJECT

public:
    static Widget *getInstance();
    ~Widget();

    int OpenReader(int iPortNo,int iBuadRate);
    int CloseReader();

    int AfcStart(stAFCStartInfo &AFCStartInfo);
    int AFCClose();

    int SynchronousClock(QString Time);

    void AfcReaderLock();
    void AfcReaderUnlock();

    int ReadCardEx(stAFCCardInfo &stCardInfo,stTradeInfo &stTradeInfo);
    int PollingCard(stPollingCard &stPollingCard);

    int TreatTicket(stTreatTicketInfo &TreatTicketInfo,stTradeInfo &TradeInfo);
    int SellTicket(stSellTicketInfo &SellTicketInfo,stTradeInfo &TradeInfo);
private:
    explicit Widget(QWidget *parent = nullptr);
    static Widget *instance;

    pthread_mutex_t m_uc_OperMutex;
    INTERFACE_HANDLE m_uHandleCom;
    int m_TpuLastErrCode;
    int m_ExeCmdResult;
    int m_iIntervalTimesLogPollCardNoCard;
    int m_iPollCardiRet;

//    Form *f;
//    conafc *c;
//    slecom *s;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "form.h"
#include "slecom.h"
#include "conafc.h"
#include <QLineEdit>
#include <QComboBox>
#include <QMessageBox>
#include <QDebug>

Widget *Widget::instance = Q_NULLPTR;

Widget *Widget::getInstance()
{
    if(instance == Q_NULLPTR)
    {
        instance = new Widget;
    }
    return instance;
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_uHandleCom = 0;
    m_iIntervalTimesLogPollCardNoCard = 0;
    m_iPollCardiRet = -1;
}

Widget::~Widget()
{
}

int Widget::OpenReader(int iPortNo, int iBuadRate)
{
    int iRet = 0;
    if(iPortNo < 0 || iPortNo > 32)
    {
        return -1;
    }
    AfcReaderLock();
    iRet = SZ_Open_Reader(iPortNo,iBuadRate,m_uHandleCom);
    AfcReaderUnlock();
//    printf("%ld\n",m_uHandleCom);
    fflush(NULL);
//    printf("%d\n",iRet);
    if(iRet != 0 || m_uHandleCom <= 0)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::CloseReader()
{
    int iRet = 0;
    AfcReaderLock();
    iRet = SZ_Close_Reader(m_uHandleCom);
    AfcReaderUnlock();
    if(iRet != 0 || m_uHandleCom <= 0)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::AfcStart(stAFCStartInfo &AFCStartInfo)
{
    int iRet = 0;
//    printf("m_uHandleCOm=%ld\n",m_uHandleCom);
    AfcReaderLock();
    iRet = SZ_AFC_Start(m_uHandleCom,AFCStartInfo);
    AfcReaderUnlock();
//    printf("lasthand=%ld\n",m_uHandleCom);
//    printf("iRet=%d\n",iRet);
    if(iRet != 0)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::AFCClose()
{
    int iRet;
    AfcReaderLock();
    iRet = SZ_AFC_Close(m_uHandleCom);
    AfcReaderUnlock();
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::SynchronousClock(QString Time)
{    
    int iRet = 0;
    char szCurDate[15];
    strcpy(szCurDate,Time.toStdString().c_str());
    printf("CurDate = %s\n",szCurDate);
    AfcReaderLock();
    iRet = SZ_Synchronous_Clock(m_uHandleCom,szCurDate);
    AfcReaderUnlock();
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

void Widget::AfcReaderLock()
{
    pthread_mutex_lock(&m_uc_OperMutex);
}

void Widget::AfcReaderUnlock()
{
    pthread_mutex_unlock(&m_uc_OperMutex);
}

int Widget::ReadCardEx(stAFCCardInfo &stCardInfo, stTradeInfo &stTradeInfo)
{
    int iRet = 0;
    AfcReaderLock();
    iRet = SZ_Read_Ticket(m_uHandleCom,stCardInfo,stTradeInfo);
    AfcReaderUnlock();
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::PollingCard(stPollingCard &stPollingCard)
{
    int iRet = 0;
    AfcReaderLock();
    iRet = SZ_Polling_Card(m_uHandleCom,stPollingCard);
    if(m_iPollCardiRet != iRet)
    {
//        QMessageBox::information(NULL,"Info","PollingCard result change",QMessageBox::Yes);
        m_iPollCardiRet = iRet;
    }
    AfcReaderUnlock();
    if(1 == iRet)
    {
        if(m_iIntervalTimesLogPollCardNoCard % 3000 == 0)
        {
//            QMessageBox::information(NULL,"Info","Don't have card",QMessageBox::Yes);
            m_iIntervalTimesLogPollCardNoCard = 1;
        }
        else
        {
            m_iIntervalTimesLogPollCardNoCard++;
        }
        m_ExeCmdResult = iRet;
        return iRet;
    }
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
        m_ExeCmdResult = iRet;
        return iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::TreatTicket(stTreatTicketInfo &TreatTicketInfo,stTradeInfo &TradeInfo)
{
    int iRet = 0;
    AfcReaderLock();
    iRet = SZ_Treat_Ticket(m_uHandleCom,TreatTicketInfo,TradeInfo);
    AfcReaderUnlock();
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

int Widget::SellTicket(stSellTicketInfo &SellTicketInfo, stTradeInfo &TradeInfo)
{
    int iRet = 0;
    AfcReaderLock();
    iRet = SZ_Sell_Ticket(m_uHandleCom,SellTicketInfo,TradeInfo);
    AfcReaderUnlock();
    if(0 != iRet)
    {
        m_TpuLastErrCode = iRet;
    }
    m_ExeCmdResult = iRet;
    return iRet;
}

2.添加动态库和动态库头文件

动态库添加在build...目录下面

 右键项目,添加外部库,选择linux平台

 将库头文件添加到项目

 

 3.分别制作各个功能页面(带ui界面)

(1)串口控制

 slecom.h

#ifndef SLECOM_H
#define SLECOM_H

#include <QWidget>
//#include "widget.h"

namespace Ui {
class slecom;
}

class Widget;
class slecom : public QWidget
{
    Q_OBJECT

public:
    explicit slecom(QWidget *parent = nullptr);
    ~slecom();

private slots:
    void on_Button_connect_clicked();
    void on_Button_disconnect_clicked();

private:
    Ui::slecom *ui;
    Widget *m_slecom;
};

#endif // SLECOM_H

slecom.cpp

#include "slecom.h"
#include "ui_slecom.h"
#include "widget.h"
#include <QDebug>
#include <QMessageBox>

slecom::slecom(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::slecom)
{
        ui->setupUi(this);

        setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
        hide();

        ui->lineEdit->setText("1");
        ui->comboBox->setCurrentIndex(6);

        connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(on_Button_connect_clicked()));
        connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(on_Button_disconnect_clicked()));

}

slecom::~slecom()
{
    delete ui;
}

void slecom::on_Button_connect_clicked()
{
    int portno = 0;
    int buadrate = 0;
    int iret = 0;
    portno = ui->lineEdit->text().toInt();
    buadrate = ui->comboBox->currentText().toInt();
    printf("%d,%d\n",portno,buadrate);
    fflush(NULL);
    if(ui->lineEdit->text().isEmpty())
    {
        QMessageBox::critical(NULL,"Warn","Please enter the port number",QMessageBox::Yes);
        return;
    }
    m_slecom = Widget::getInstance();
    iret = m_slecom->OpenReader(portno,buadrate);
    if(0 != iret)
    {
        QMessageBox::critical(NULL,"Error","Connection failed",QMessageBox::Yes);
        return;
    }
    else
    {
        QMessageBox::information(NULL,"Correct","Connection success",QMessageBox::Yes);
        return;
    }
}

void slecom::on_Button_disconnect_clicked()
{
    int iret = 0;
    iret = m_slecom->CloseReader();
    if(0 != iret)
    {
        QMessageBox::critical(NULL,"Error","Disconnect failed",QMessageBox::Yes);
        return;
    }
    else
    {
        QMessageBox::information(NULL,"Correct","DisConnect success",QMessageBox::Yes);
        return;
    }
}

(2)时钟

 form.h

#ifndef FORM_H
#define FORM_H

//#include "widget.h"
#include <QWidget>

namespace Ui {
class Form;
}

class Widget;
class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();

private:
    Ui::Form *ui;
    Widget *m_form;

public slots:
    void timerUpdata(void);

private slots:
    void on_Button_synclock_clicked();
};

#endif // FORM_H

form.cpp

#include "form.h"
#include "widget.h"
#include "ui_form.h"
#include "AFCReader.h"
#include <QFont>
#include <QTime>
#include <QTimer>
#include <qdatastream.h>
#include <QMessageBox>

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);

    setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    hide();

    ui->lineEdit->setMaxLength(14);

    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdata()));
    timer->start(1000);

    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(on_Button_synclock_clicked()));


}

Form::~Form()
{
    delete ui;

}

void Form::timerUpdata()
{
    QFont font("Microsoft YaHei",20,50);
    QDateTime time = QDateTime::currentDateTime()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值