QT下,添加Button,EditText。计算NMEA0183的校验和。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include
#include
#include
#include
#include

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

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

void CheckSumBtn_PushDown(void);
void ClearBtn_PushDown(void);
unsigned char CaculateCheckSum( QString& input, char *out);

private:
Ui::MainWindow *ui;

QPushButton *m_btn;
QPushButton *m_clearBtn;
QTextEdit   *m_inPutEdit;
QTextEdit   *m_outPutEdit;
QLabel      *m_labelIn;
QLabel      *m_labelOut;

};

#endif // MAINWINDOW_H

下面为Cpp文件

#include “mainwindow.h”
#include “ui_mainwindow.h”

#define LABLE_X (5)
#define LABLE_Y_IN (20)
#define LABLE_Y_OUT (60)
#define LABLE_LEN (60)
#define LABLE_HIGHT (30)
#define EDIT_TEXT_X (LABLE_X+LABLE_LEN)
#define EDIT_TEXT_Y_IN (LABLE_Y_IN)
#define EDIT_TEXT_Y_OUT (LABLE_Y_OUT)
#define EDIT_TEXT_LEN (500)
#define EDIT_TEXT_HIGHT (30)
#define BTN_LEN (80)
#define BTN_CALC_X (EDIT_TEXT_X)
#define BTN_CLEAR_X (EDIT_TEXT_X+EDIT_TEXT_LEN-BTN_LEN)
#define BTN_Y (250)

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

this->resize(600, 300);
//修改窗口标题
setWindowTitle("NMEA0183-校验和");
//设置固定的窗口
setFixedSize(600,300);

m_btn        = new QPushButton;
m_clearBtn   = new QPushButton;
m_inPutEdit  = new QTextEdit;
m_outPutEdit = new QTextEdit;
m_labelIn    = new QLabel;
m_labelOut   = new QLabel;

//设置父类关系,因为是widget基类的
m_btn->setParent(this);
m_clearBtn->setParent(this);
m_inPutEdit->setParent(this);
m_outPutEdit->setParent(this);
m_labelIn->setParent(this);
m_labelOut->setParent(this);

//设置显示文字
m_btn->setText("Caculate");  // char* 隐式转换为QString
m_clearBtn->setText("Clear");
m_labelIn->setText("Input");
m_labelOut->setText("CheckSum");

//重置按钮尺寸
m_btn->resize(BTN_LEN,30);
m_clearBtn->resize(BTN_LEN,30);
m_labelIn->resize(LABLE_LEN,LABLE_HIGHT);
m_labelOut->resize(LABLE_LEN,LABLE_HIGHT);
m_inPutEdit->resize(EDIT_TEXT_LEN, EDIT_TEXT_HIGHT );
m_outPutEdit->resize(EDIT_TEXT_LEN, EDIT_TEXT_HIGHT );

m_labelIn->move(LABLE_X,  LABLE_Y_IN);
m_labelOut->move(LABLE_X, LABLE_Y_OUT);
m_inPutEdit->move(EDIT_TEXT_X,  EDIT_TEXT_Y_IN);
m_outPutEdit->move(EDIT_TEXT_X, EDIT_TEXT_Y_OUT);
m_btn->move(BTN_CALC_X, BTN_Y);
m_clearBtn->move(BTN_CLEAR_X, BTN_Y);
m_inPutEdit->clear();
m_outPutEdit->clear();

connect(m_btn,      &QPushButton::clicked, this, &MainWindow::CheckSumBtn_PushDown);
connect(m_clearBtn, &QPushButton::clicked, this, &MainWindow::ClearBtn_PushDown);

}


Qthead
#include
#include
#include

//为了直观就将代码和头文件放一起了

class ChildThread : public QThread
{
Q_OBJECT
public:
ChildThread (QThread *parent = nullptr) : QThread(parent),
mValue_1(1), // mValue_1在主线程空间
mValue_2(new int), // mValue_1在主线程空间
mValue_3(nullptr)
{ }
~ChildThread()
{
//如果线程正在运行,则退出,并等待完成退出
if(isRunning())
{
mStopFlag = true;
while(isRunning()) QThread::usleep(5);
}
}

void Stop(void) { mStopFlag = true; }

void Run()
{
    mValue_3 = new int;//mValue_3在子线程空间
    mStopFlag = false;
    while(!mStopFlag)
    {
        //在这里做一些想要做的事
    }
    emit SigFinished();
}

signals:
void SigFinished(void);

private:
bool mStopFlag;//是否退出标志
int mValue_1;
int *mValue_2;
int *mValue_3;
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

ChildThread *thread = new ChildThread;
connect(thread, &ChildThread::SigFinished, thread, QThread::deleteLater);//自动释放
thread->start();//必须运行线程,不运行的话本例中的ChildThread::Run()是不会执行的

QThread::usleep(5000);//延时几秒钟
thread->Stop();//退出线程
while(thread->isRunning()) QThread::usleep(10); //等待线程退出

//事件循环
return a.exec();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值