Qt无人机姿态模拟

本文介绍了作者完成的一个无人机姿态控制项目,涉及登录界面、用户级别管理、数据库设计、数据传输与图形展示。通过Sqlite数据库、模拟终端操作和网络通信,实现了用户权限区分(普通用户和VIP)、实时数据查看、事故报告生成等功能。

这个是我实训做的项目,是模拟对无人机姿态的控制,实现对无人机飞行数据的分析,项目主要分为登录窗口,客户端和服务器端
项目主题界面:
在这里插入图片描述

需求分析:

1、设计本地登录界面及云端平台界面。
2、根据用户登录信息的不同,选择不同的云端用户级别,具体为user和vip。
3、普通用户只能查看实时数据、自动给出实时建议,超级用户可以查看实时数据、历史数据、统计数据判断是否危险飞行、生成事故报告
4、创建数据库,保存两张表,表1判断云端用户级别及用户登录验证,表2记录一定时间内的飞机姿态数据
5、事故报告以文档(word、pdf)形式生成

功能分析:

1、可以根据用户级别的不同授权不同的内容查看。
2、可以使用模拟终端(滑动按钮)来改变机身角度的值。
3、通过计算机网络将数据进行传输。
4、可以实时改变验证平台上图形的状态。
5、可以实时记录机身角度改变的内容并保存到数据库中

总体设计:

在这里插入图片描述
我先从登录界面开始说起吧

登录界面的设计:

在这里插入图片描述
在这里插入图片描述
登录界面主要分为用户登录和管理员登录,运用了Sqlite轻量级数据库,可实现账号的注册,在普通用户界面加了一个验证码的功能,其实是通过随机数来实现验证,主要的代码如下:
创建数据库和表

 //创建数据库
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    //QSqlDatabase db1=QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库名
    db.setDatabaseName("pwd.db");
    //db1.setDatabaseName("pwd1.db");
    //打开数据
    if(db.open())
    {
   
   
        qDebug()<<"open database success";
    }else
    {
   
   
        qDebug()<<"open database fail";
    }
    //创建一个存储用户名密码的数据库表
    QString tableuser="create table userinfo(username varchar(64),password varchar(64))";
    QString tableadmin="create table userinfo1(username1 varchar(64),password1 varchar(64))";

实现注册:

 QString username=ui->useredit->text();
    QString password=ui->passedit->text();
    QString cmd=QString("insert into userinfo values('%1','%2')")
            .arg(username).arg(password);
    QSqlQuery query;
    if(username==NULL||password==NULL)
    {
   
   
        QMessageBox::information(this,"注册提示","用户名或密码不能为空");

    }
    else if(query.exec(cmd))
    {
   
   
        QMessageBox::information(this,"注册提示","注册成功");

    }

服务器的实现:

在这里插入图片描述
服务器界面就是一个模拟无人机的圆
在这里插入图片描述
这里运用了Qpainter来绘制三角,圆等形状来实现对无人机的模拟,服务器接收来自客户端的消息,来进行角度的改变,接收来自客户端连接的信号:

if(svr->hasPendingConnections()){
   
   
        socket = svr->nextPendingConnection();
        connect(socket,SIGNAL(readyRead()),this,SLOT(slotRecv()));
        qDebug() << "有设备连接";
    }

接收客户端数据:

  QByteArray array = socket->readAll();
    QString str = QString::fromUtf8(array);
    QString tmp;
    int j = 0;
    while(j<str.size()){
   
   
        tmp.clear();
        int k = 0;
        for(j;j<str.length();j++)
        {
   
   
            if(str[j]>='0'&&str[j]<='9'||
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值