b
This commit is contained in:
+517
-517
@@ -1,517 +1,517 @@
|
||||
#include "CheckUI.h"
|
||||
#include "ui_CheckUI.h"
|
||||
|
||||
|
||||
|
||||
|
||||
const char* CheckUI::_versionJsonKey = "version";
|
||||
const char* CheckUI::_spacingJsonKey = "spacing";
|
||||
|
||||
const char* CheckUI::_commentJsonKey = "comment";
|
||||
const char* CheckUI::_vehicleJsonKey = "vehicle";
|
||||
|
||||
|
||||
const char* CheckUI::_ButtonJsonKey = "Button";
|
||||
|
||||
const char* CheckUI::_WidthJsonKey = "Width";
|
||||
const char* CheckUI::_HeightJsonKey = "Height";
|
||||
|
||||
const char* CheckUI::_TextJsonKey = "Text";
|
||||
const char* CheckUI::_rowJsonKey = "row";
|
||||
const char* CheckUI::_descriptionJsonKey = "description";
|
||||
const char* CheckUI::_columnJsonKey = "column";
|
||||
|
||||
|
||||
const char* CheckUI::_param1JsonKey = "param1";
|
||||
const char* CheckUI::_param2JsonKey = "param2";
|
||||
const char* CheckUI::_param3JsonKey = "param3";
|
||||
const char* CheckUI::_param4JsonKey = "param4";
|
||||
const char* CheckUI::_param5JsonKey = "param5";
|
||||
const char* CheckUI::_param6JsonKey = "param6";
|
||||
const char* CheckUI::_param7JsonKey = "param7";
|
||||
const char* CheckUI::_commandJsonKey = "command";
|
||||
const char* CheckUI::_confirmJsonKey = "confirm";
|
||||
|
||||
|
||||
|
||||
CheckUI::CheckUI(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::CheckUI)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
//检测文件夹,如果不存在,那么就新建一个
|
||||
QDir *Dir = new QDir;
|
||||
if(!Dir->exists("./checks"))
|
||||
Dir->mkdir("./checks");//如果文件夹不存在就新建
|
||||
|
||||
//load qss
|
||||
QFile file(":/qss/CheckUI.qss");
|
||||
file.open(QFile::ReadOnly);
|
||||
QTextStream filetext(&file);
|
||||
QString stylesheet = filetext.readAll();
|
||||
this->setStyleSheet(stylesheet);
|
||||
file.close();
|
||||
|
||||
//载入json
|
||||
|
||||
LoadCheckFiles("./checks");
|
||||
|
||||
//loadCommandJson(":/json/Check.json");
|
||||
//loadCommandJson("./json/Check.json");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CheckUI::~CheckUI()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::reBuild(void)
|
||||
{
|
||||
//将旧的按键全部删除
|
||||
QObjectList olist = ui->frame_check->children();
|
||||
|
||||
foreach (QObject *obj, olist) {
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
disconnect(btn,SIGNAL(clicked(bool)),
|
||||
this,SLOT(on_commandClicked()));
|
||||
delete btn;
|
||||
}
|
||||
|
||||
QLabel *lab = qobject_cast<QLabel *>(obj);
|
||||
if(lab)
|
||||
{
|
||||
delete lab;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//添加新的按键
|
||||
ui->gridLayout_Check->setSpacing(spacing);
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QPushButton *btn = new QPushButton(ui->frame_check);
|
||||
|
||||
btn->setText(info.toObject().find(_TextJsonKey).value().toString());
|
||||
|
||||
btn->setFixedSize(width,height);
|
||||
|
||||
ui->gridLayout_Check->addWidget(btn,
|
||||
info.toObject().find(_rowJsonKey).value().toInt(),
|
||||
info.toObject().find(_columnJsonKey).value().toInt());
|
||||
|
||||
|
||||
btn->setProperty("CheckState",CheckState::Init);
|
||||
btn->style()->unpolish(btn);
|
||||
btn->style()->polish(btn);
|
||||
|
||||
|
||||
QLabel *lab = new QLabel(ui->frame_check);
|
||||
|
||||
lab->adjustSize();
|
||||
lab->setWordWrap(true);
|
||||
|
||||
lab->setText(info.toObject().find(_descriptionJsonKey).value().toString());
|
||||
|
||||
ui->gridLayout_Check->addWidget(lab,
|
||||
info.toObject().find(_rowJsonKey).value().toInt(),
|
||||
info.toObject().find(_columnJsonKey).value().toInt() + 1);
|
||||
|
||||
connect(btn,SIGNAL(clicked(bool)),
|
||||
this,SLOT(on_commandClicked()));
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::loadCommandJson(QJsonObject json)
|
||||
{
|
||||
version = json.value(_versionJsonKey).toInt();
|
||||
qDebug() << "check version :" << version;
|
||||
|
||||
|
||||
spacing = json.value(_spacingJsonKey).toInt();
|
||||
width = json.value(_WidthJsonKey).toInt();
|
||||
height = json.value(_HeightJsonKey).toInt();
|
||||
|
||||
|
||||
QJsonValue jsonValue = json.value(_ButtonJsonKey);
|
||||
|
||||
if (!jsonValue.isArray()) {
|
||||
qWarning() << "Button not array";
|
||||
return;
|
||||
}
|
||||
|
||||
infoArray = jsonValue.toArray();
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
qWarning() << "Array should contain objects";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_commandClicked()
|
||||
{
|
||||
//找到消息的发送者
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(sender());
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//找到id或者名字一样的按键,找到参数,发出去
|
||||
|
||||
QString _name = info.toObject().find(_TextJsonKey).value().toString();
|
||||
QString _text = btn->text();
|
||||
|
||||
if(_name == _text)
|
||||
{
|
||||
float param1 = info.toObject().find(_param1JsonKey).value().toDouble();
|
||||
float param2 = info.toObject().find(_param2JsonKey).value().toDouble();
|
||||
float param3 = info.toObject().find(_param3JsonKey).value().toDouble();
|
||||
float param4 = info.toObject().find(_param4JsonKey).value().toDouble();
|
||||
float param5 = info.toObject().find(_param5JsonKey).value().toDouble();
|
||||
float param6 = info.toObject().find(_param6JsonKey).value().toDouble();
|
||||
float param7 = info.toObject().find(_param7JsonKey).value().toDouble();
|
||||
uint16_t command = info.toObject().find(_commandJsonKey).value().toInt();
|
||||
uint8_t confirm = info.toObject().find(_confirmJsonKey).value().toInt();
|
||||
|
||||
emit cmd_long(param1,param2, param3,param4,param5,param6,param7,command,confirm);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CheckUI::commandAccepted(bool flag,uint16_t command,uint8_t result)
|
||||
{
|
||||
//找到消息的发送者
|
||||
QObjectList list = ui->frame_check->children();
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(command == info.toObject().find(_commandJsonKey).value().toInt())
|
||||
{
|
||||
foreach (QObject *obj, list)
|
||||
{
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
if(btn->text() == info.toObject().find(_TextJsonKey).value().toString())
|
||||
{
|
||||
if(flag)
|
||||
{
|
||||
btn->setProperty("state",CheckState::Pass);
|
||||
}
|
||||
else
|
||||
{
|
||||
btn->setProperty("state",CheckState::Fail);
|
||||
}
|
||||
btn->style()->unpolish(btn);
|
||||
btn->style()->polish(btn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CheckUI::RecieveMsg(mavlink_message_t msg)
|
||||
{
|
||||
switch (msg.msgid) {
|
||||
case MAVLINK_MSG_ID_AUTOPILOT_VERSION: {
|
||||
mavlink_msg_autopilot_version_decode(&msg,&autopilot_version);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SYS_STATUS: {
|
||||
mavlink_msg_sys_status_decode(&msg,&sys_status);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_HEARTBEAT: {
|
||||
mavlink_msg_heartbeat_decode(&msg,&heartbeat);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_PING: {
|
||||
mavlink_msg_ping_decode(&msg,&ping);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_ATTITUDE: {
|
||||
mavlink_msg_attitude_decode(&msg,&attitude);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_GPS_RAW_INT: {
|
||||
mavlink_msg_gps_raw_int_decode(&msg,&gps_raw_int);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_GLOBAL_POSITION_INT: {
|
||||
mavlink_msg_global_position_int_decode(&msg,&global_position_int);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SERVO_OUTPUT_RAW: {
|
||||
mavlink_msg_servo_output_raw_decode(&msg,&servo_output_raw);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_RC_CHANNELS_RAW: {
|
||||
mavlink_msg_rc_channels_raw_decode(&msg,&rc_channels_raw);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT: {
|
||||
mavlink_msg_nav_controller_output_decode(&msg,&nav_controller_output);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_AIRSPEED_AUTOCAL: {
|
||||
mavlink_msg_airspeed_autocal_decode(&msg,&airspeed_autocal);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_RPM: {
|
||||
mavlink_msg_rpm_decode(&msg,&rpm);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SCALED_PRESSURE: {
|
||||
mavlink_msg_scaled_pressure_decode(&msg,&scaled_pressure);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_EXTENDED_SYS_STATE: {
|
||||
mavlink_msg_extended_sys_state_decode(&msg,&extended_sys_state);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_BATTERY_STATUS: {
|
||||
mavlink_msg_battery_status_decode(&msg,&battery_status);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_VIBRATION: {
|
||||
mavlink_msg_vibration_decode(&msg,&vibration);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_EngineState: {
|
||||
mavlink_msg_enginestate_decode(&msg,&enginestate);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_VFR_HUD: {
|
||||
mavlink_msg_vfr_hud_decode(&msg,&vfr_hud);
|
||||
}break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加一个设备,
|
||||
void CheckUI::addVehicles(int sysid, int compid)
|
||||
{
|
||||
Q_UNUSED(compid)
|
||||
|
||||
if(!Vehicles.keys().contains(sysid))
|
||||
{
|
||||
Vehicles.insert(sysid,tr("Vehicle %1").arg(sysid));
|
||||
|
||||
if(ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
ui->pushButton_Vehicle->setText(tr("Vehicle %1").arg(sysid));
|
||||
|
||||
//检查是否有专属的检查文件,如果有,那么载入,如果没有载入通用的检查文件
|
||||
if(CheckFiles.contains(sysid))
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(sysid));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains special check file") << sysid;
|
||||
if(CheckFiles.contains(0xFFFF))//默认文件
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(0xFFFF));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains Default check file") << sysid;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject CheckUI::parseCheckfiles(const QString& jsonFilename)
|
||||
{
|
||||
QJsonObject json;
|
||||
|
||||
QFile jsonFile(jsonFilename);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qWarning() << "Unable to open file" << jsonFilename << jsonFile.errorString();
|
||||
return json;
|
||||
}
|
||||
|
||||
QByteArray bytes = jsonFile.readAll();
|
||||
|
||||
jsonFile.close();
|
||||
QJsonParseError jsonParseError;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
|
||||
if (jsonParseError.error != QJsonParseError::NoError) {
|
||||
qWarning() << jsonFilename << "Unable to open json document" << jsonParseError.errorString();
|
||||
return json;
|
||||
}
|
||||
|
||||
json = doc.object();
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
void CheckUI::LoadCheckFiles(QString path)
|
||||
{
|
||||
QDir dir(path);
|
||||
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
|
||||
|
||||
foreach(QFileInfo fileinfo, file_list)
|
||||
{
|
||||
QString filter;
|
||||
filter = fileinfo.suffix(); //后缀名
|
||||
if(filter == "json")
|
||||
{
|
||||
QJsonObject json = parseCheckfiles(fileinfo.absoluteFilePath());
|
||||
|
||||
if(&json)
|
||||
{
|
||||
int vehicle = json.value(_vehicleJsonKey).toInt();
|
||||
|
||||
CheckFiles.insert(vehicle,json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::setVehicle(QVariant value)
|
||||
{
|
||||
ui->pushButton_Vehicle->setText(value.toString());
|
||||
//从新载入一次文件
|
||||
LoadCheckFiles("./checks");
|
||||
|
||||
int index = value.toString().indexOf(' ');
|
||||
QString selectid = value.toString().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
//检查是否有专属的检查文件,如果有,那么载入,如果没有载入通用的检查文件
|
||||
if(CheckFiles.contains(vehicle))
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(vehicle));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains special check file") << vehicle;
|
||||
if(CheckFiles.contains(0xFFFF))//默认文件
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(0xFFFF));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains Default check file") << vehicle;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::on_pushButton_Vehicle_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
Selector *selector = new Selector(this);
|
||||
|
||||
selector->setGeometry(0,0,this->geometry().width(),this->geometry().height());
|
||||
//selector->setGeometry(0,0,this->width(),this->height());
|
||||
|
||||
QStringList list;
|
||||
list.clear();
|
||||
|
||||
for(QHash<int,QString>::iterator ite=Vehicles.begin(); ite!=Vehicles.end();++ite)//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
list.append(tr("Vehicle %1").arg(ite.key()));
|
||||
}
|
||||
|
||||
selector->setList(list,ui->pushButton_Vehicle->text());
|
||||
connect(selector,SIGNAL(confirmValue(QVariant)),
|
||||
this,SLOT(setVehicle(QVariant)));
|
||||
|
||||
selector->show();
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_pushButton_Previous_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
int index = ui->pushButton_Vehicle->text().indexOf(' ');
|
||||
QString selectid = ui->pushButton_Vehicle->text().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
qDebug() << vehicle
|
||||
<< Vehicles.keys()
|
||||
<< Vehicles.values();
|
||||
|
||||
bool isLast = false;
|
||||
for(QHash<int,QString>::const_iterator ite=Vehicles.begin(); ite!=Vehicles.end();(isLast)?(ite--):(ite++))//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
qDebug() << ite.value()
|
||||
<< "isLast" << isLast;
|
||||
if(isLast)
|
||||
{
|
||||
setVehicle(tr("Vehicle %1").arg(ite.key()));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ite.key() == vehicle)
|
||||
{
|
||||
isLast = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_pushButton_Next_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
int index = ui->pushButton_Vehicle->text().indexOf(' ');
|
||||
QString selectid = ui->pushButton_Vehicle->text().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
qDebug() << vehicle
|
||||
<< Vehicles.keys()
|
||||
<< Vehicles.values();
|
||||
|
||||
bool isNext = false;
|
||||
for(QHash<int,QString>::iterator ite=Vehicles.begin(); ite!=Vehicles.end();++ite)//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
qDebug() << ite.value()
|
||||
<< "Next" << isNext;
|
||||
if(isNext)
|
||||
{
|
||||
|
||||
setVehicle(tr("Vehicle %1").arg(ite.key()));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ite.key() == vehicle)
|
||||
{
|
||||
isNext = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#include "CheckUI.h"
|
||||
#include "ui_CheckUI.h"
|
||||
|
||||
|
||||
|
||||
|
||||
const char* CheckUI::_versionJsonKey = "version";
|
||||
const char* CheckUI::_spacingJsonKey = "spacing";
|
||||
|
||||
const char* CheckUI::_commentJsonKey = "comment";
|
||||
const char* CheckUI::_vehicleJsonKey = "vehicle";
|
||||
|
||||
|
||||
const char* CheckUI::_ButtonJsonKey = "Button";
|
||||
|
||||
const char* CheckUI::_WidthJsonKey = "Width";
|
||||
const char* CheckUI::_HeightJsonKey = "Height";
|
||||
|
||||
const char* CheckUI::_TextJsonKey = "Text";
|
||||
const char* CheckUI::_rowJsonKey = "row";
|
||||
const char* CheckUI::_descriptionJsonKey = "description";
|
||||
const char* CheckUI::_columnJsonKey = "column";
|
||||
|
||||
|
||||
const char* CheckUI::_param1JsonKey = "param1";
|
||||
const char* CheckUI::_param2JsonKey = "param2";
|
||||
const char* CheckUI::_param3JsonKey = "param3";
|
||||
const char* CheckUI::_param4JsonKey = "param4";
|
||||
const char* CheckUI::_param5JsonKey = "param5";
|
||||
const char* CheckUI::_param6JsonKey = "param6";
|
||||
const char* CheckUI::_param7JsonKey = "param7";
|
||||
const char* CheckUI::_commandJsonKey = "command";
|
||||
const char* CheckUI::_confirmJsonKey = "confirm";
|
||||
|
||||
|
||||
|
||||
CheckUI::CheckUI(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::CheckUI)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
//检测文件夹,如果不存在,那么就新建一个
|
||||
QDir *Dir = new QDir;
|
||||
if(!Dir->exists("./checks"))
|
||||
Dir->mkdir("./checks");//如果文件夹不存在就新建
|
||||
|
||||
//load qss
|
||||
QFile file(":/qss/CheckUI.qss");
|
||||
file.open(QFile::ReadOnly);
|
||||
QTextStream filetext(&file);
|
||||
QString stylesheet = filetext.readAll();
|
||||
this->setStyleSheet(stylesheet);
|
||||
file.close();
|
||||
|
||||
//载入json
|
||||
|
||||
LoadCheckFiles("./checks");
|
||||
|
||||
//loadCommandJson(":/json/Check.json");
|
||||
//loadCommandJson("./json/Check.json");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CheckUI::~CheckUI()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::reBuild(void)
|
||||
{
|
||||
//将旧的按键全部删除
|
||||
QObjectList olist = ui->frame_check->children();
|
||||
|
||||
foreach (QObject *obj, olist) {
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
disconnect(btn,SIGNAL(clicked(bool)),
|
||||
this,SLOT(on_commandClicked()));
|
||||
delete btn;
|
||||
}
|
||||
|
||||
QLabel *lab = qobject_cast<QLabel *>(obj);
|
||||
if(lab)
|
||||
{
|
||||
delete lab;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//添加新的按键
|
||||
ui->gridLayout_Check->setSpacing(spacing);
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QPushButton *btn = new QPushButton(ui->frame_check);
|
||||
|
||||
btn->setText(info.toObject().find(_TextJsonKey).value().toString());
|
||||
|
||||
btn->setFixedSize(width,height);
|
||||
|
||||
ui->gridLayout_Check->addWidget(btn,
|
||||
info.toObject().find(_rowJsonKey).value().toInt(),
|
||||
info.toObject().find(_columnJsonKey).value().toInt());
|
||||
|
||||
|
||||
btn->setProperty("CheckState",CheckState::Init);
|
||||
btn->style()->unpolish(btn);
|
||||
btn->style()->polish(btn);
|
||||
|
||||
|
||||
QLabel *lab = new QLabel(ui->frame_check);
|
||||
|
||||
lab->adjustSize();
|
||||
lab->setWordWrap(true);
|
||||
|
||||
lab->setText(info.toObject().find(_descriptionJsonKey).value().toString());
|
||||
|
||||
ui->gridLayout_Check->addWidget(lab,
|
||||
info.toObject().find(_rowJsonKey).value().toInt(),
|
||||
info.toObject().find(_columnJsonKey).value().toInt() + 1);
|
||||
|
||||
connect(btn,SIGNAL(clicked(bool)),
|
||||
this,SLOT(on_commandClicked()));
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::loadCommandJson(QJsonObject json)
|
||||
{
|
||||
version = json.value(_versionJsonKey).toInt();
|
||||
qDebug() << "check version :" << version;
|
||||
|
||||
|
||||
spacing = json.value(_spacingJsonKey).toInt();
|
||||
width = json.value(_WidthJsonKey).toInt();
|
||||
height = json.value(_HeightJsonKey).toInt();
|
||||
|
||||
|
||||
QJsonValue jsonValue = json.value(_ButtonJsonKey);
|
||||
|
||||
if (!jsonValue.isArray()) {
|
||||
qWarning() << "Button not array";
|
||||
return;
|
||||
}
|
||||
|
||||
infoArray = jsonValue.toArray();
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
qWarning() << "Array should contain objects";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_commandClicked()
|
||||
{
|
||||
//找到消息的发送者
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(sender());
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//找到id或者名字一样的按键,找到参数,发出去
|
||||
|
||||
QString _name = info.toObject().find(_TextJsonKey).value().toString();
|
||||
QString _text = btn->text();
|
||||
|
||||
if(_name == _text)
|
||||
{
|
||||
float param1 = info.toObject().find(_param1JsonKey).value().toDouble();
|
||||
float param2 = info.toObject().find(_param2JsonKey).value().toDouble();
|
||||
float param3 = info.toObject().find(_param3JsonKey).value().toDouble();
|
||||
float param4 = info.toObject().find(_param4JsonKey).value().toDouble();
|
||||
float param5 = info.toObject().find(_param5JsonKey).value().toDouble();
|
||||
float param6 = info.toObject().find(_param6JsonKey).value().toDouble();
|
||||
float param7 = info.toObject().find(_param7JsonKey).value().toDouble();
|
||||
uint16_t command = info.toObject().find(_commandJsonKey).value().toInt();
|
||||
uint8_t confirm = info.toObject().find(_confirmJsonKey).value().toInt();
|
||||
|
||||
emit cmd_long(param1,param2, param3,param4,param5,param6,param7,command,confirm);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CheckUI::commandAccepted(bool flag,uint16_t command,uint8_t result)
|
||||
{
|
||||
//找到消息的发送者
|
||||
QObjectList list = ui->frame_check->children();
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(command == info.toObject().find(_commandJsonKey).value().toInt())
|
||||
{
|
||||
foreach (QObject *obj, list)
|
||||
{
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
if(btn->text() == info.toObject().find(_TextJsonKey).value().toString())
|
||||
{
|
||||
if(flag)
|
||||
{
|
||||
btn->setProperty("state",CheckState::Pass);
|
||||
}
|
||||
else
|
||||
{
|
||||
btn->setProperty("state",CheckState::Fail);
|
||||
}
|
||||
btn->style()->unpolish(btn);
|
||||
btn->style()->polish(btn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CheckUI::RecieveMsg(mavlink_message_t msg)
|
||||
{
|
||||
switch (msg.msgid) {
|
||||
case MAVLINK_MSG_ID_AUTOPILOT_VERSION: {
|
||||
mavlink_msg_autopilot_version_decode(&msg,&autopilot_version);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SYS_STATUS: {
|
||||
mavlink_msg_sys_status_decode(&msg,&sys_status);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_HEARTBEAT: {
|
||||
mavlink_msg_heartbeat_decode(&msg,&heartbeat);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_PING: {
|
||||
mavlink_msg_ping_decode(&msg,&ping);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_ATTITUDE: {
|
||||
mavlink_msg_attitude_decode(&msg,&attitude);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_GPS_RAW_INT: {
|
||||
mavlink_msg_gps_raw_int_decode(&msg,&gps_raw_int);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_GLOBAL_POSITION_INT: {
|
||||
mavlink_msg_global_position_int_decode(&msg,&global_position_int);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SERVO_OUTPUT_RAW: {
|
||||
mavlink_msg_servo_output_raw_decode(&msg,&servo_output_raw);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_RC_CHANNELS_RAW: {
|
||||
mavlink_msg_rc_channels_raw_decode(&msg,&rc_channels_raw);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT: {
|
||||
mavlink_msg_nav_controller_output_decode(&msg,&nav_controller_output);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_AIRSPEED_AUTOCAL: {
|
||||
mavlink_msg_airspeed_autocal_decode(&msg,&airspeed_autocal);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_RPM: {
|
||||
mavlink_msg_rpm_decode(&msg,&rpm);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_SCALED_PRESSURE: {
|
||||
mavlink_msg_scaled_pressure_decode(&msg,&scaled_pressure);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_EXTENDED_SYS_STATE: {
|
||||
mavlink_msg_extended_sys_state_decode(&msg,&extended_sys_state);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_BATTERY_STATUS: {
|
||||
mavlink_msg_battery_status_decode(&msg,&battery_status);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_VIBRATION: {
|
||||
mavlink_msg_vibration_decode(&msg,&vibration);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_EngineState: {
|
||||
mavlink_msg_enginestate_decode(&msg,&enginestate);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_VFR_HUD: {
|
||||
mavlink_msg_vfr_hud_decode(&msg,&vfr_hud);
|
||||
}break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加一个设备,
|
||||
void CheckUI::addVehicles(int sysid, int compid)
|
||||
{
|
||||
Q_UNUSED(compid)
|
||||
|
||||
if(!Vehicles.keys().contains(sysid))
|
||||
{
|
||||
Vehicles.insert(sysid,tr("Vehicle %1").arg(sysid));
|
||||
|
||||
if(ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
ui->pushButton_Vehicle->setText(tr("Vehicle %1").arg(sysid));
|
||||
|
||||
//检查是否有专属的检查文件,如果有,那么载入,如果没有载入通用的检查文件
|
||||
if(CheckFiles.contains(sysid))
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(sysid));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains special check file") << sysid;
|
||||
if(CheckFiles.contains(0xFFFF))//默认文件
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(0xFFFF));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains Default check file") << sysid;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject CheckUI::parseCheckfiles(const QString& jsonFilename)
|
||||
{
|
||||
QJsonObject json;
|
||||
|
||||
QFile jsonFile(jsonFilename);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qWarning() << "Unable to open file" << jsonFilename << jsonFile.errorString();
|
||||
return json;
|
||||
}
|
||||
|
||||
QByteArray bytes = jsonFile.readAll();
|
||||
|
||||
jsonFile.close();
|
||||
QJsonParseError jsonParseError;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
|
||||
if (jsonParseError.error != QJsonParseError::NoError) {
|
||||
qWarning() << jsonFilename << "Unable to open json document" << jsonParseError.errorString();
|
||||
return json;
|
||||
}
|
||||
|
||||
json = doc.object();
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
void CheckUI::LoadCheckFiles(QString path)
|
||||
{
|
||||
QDir dir(path);
|
||||
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
|
||||
|
||||
foreach(QFileInfo fileinfo, file_list)
|
||||
{
|
||||
QString filter;
|
||||
filter = fileinfo.suffix(); //后缀名
|
||||
if(filter == "json")
|
||||
{
|
||||
QJsonObject json = parseCheckfiles(fileinfo.absoluteFilePath());
|
||||
|
||||
if(&json)
|
||||
{
|
||||
int vehicle = json.value(_vehicleJsonKey).toInt();
|
||||
|
||||
CheckFiles.insert(vehicle,json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::setVehicle(QVariant value)
|
||||
{
|
||||
ui->pushButton_Vehicle->setText(value.toString());
|
||||
//从新载入一次文件
|
||||
LoadCheckFiles("./checks");
|
||||
|
||||
int index = value.toString().indexOf(' ');
|
||||
QString selectid = value.toString().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
//检查是否有专属的检查文件,如果有,那么载入,如果没有载入通用的检查文件
|
||||
if(CheckFiles.contains(vehicle))
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(vehicle));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains special check file") << vehicle;
|
||||
if(CheckFiles.contains(0xFFFF))//默认文件
|
||||
{
|
||||
loadCommandJson(CheckFiles.value(0xFFFF));
|
||||
reBuild();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << tr("not Contains Default check file") << vehicle;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::on_pushButton_Vehicle_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
Selector *selector = new Selector(this);
|
||||
|
||||
selector->setGeometry(0,0,this->geometry().width(),this->geometry().height());
|
||||
//selector->setGeometry(0,0,this->width(),this->height());
|
||||
|
||||
QStringList list;
|
||||
list.clear();
|
||||
|
||||
for(QHash<int,QString>::iterator ite=Vehicles.begin(); ite!=Vehicles.end();++ite)//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
list.append(tr("Vehicle %1").arg(ite.key()));
|
||||
}
|
||||
|
||||
selector->setList(list,ui->pushButton_Vehicle->text());
|
||||
connect(selector,SIGNAL(confirmValue(QVariant)),
|
||||
this,SLOT(setVehicle(QVariant)));
|
||||
|
||||
selector->show();
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_pushButton_Previous_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
int index = ui->pushButton_Vehicle->text().indexOf(' ');
|
||||
QString selectid = ui->pushButton_Vehicle->text().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
qDebug() << vehicle
|
||||
<< Vehicles.keys()
|
||||
<< Vehicles.values();
|
||||
|
||||
bool isLast = false;
|
||||
for(QHash<int,QString>::const_iterator ite=Vehicles.begin(); ite!=Vehicles.end();(isLast)?(ite--):(ite++))//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
qDebug() << ite.value()
|
||||
<< "isLast" << isLast;
|
||||
if(isLast)
|
||||
{
|
||||
setVehicle(tr("Vehicle %1").arg(ite.key()));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ite.key() == vehicle)
|
||||
{
|
||||
isLast = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::on_pushButton_Next_clicked()
|
||||
{
|
||||
if(!ui->pushButton_Vehicle->text().isEmpty())
|
||||
{
|
||||
int index = ui->pushButton_Vehicle->text().indexOf(' ');
|
||||
QString selectid = ui->pushButton_Vehicle->text().mid(index);
|
||||
int vehicle = selectid.toInt();
|
||||
|
||||
qDebug() << vehicle
|
||||
<< Vehicles.keys()
|
||||
<< Vehicles.values();
|
||||
|
||||
bool isNext = false;
|
||||
for(QHash<int,QString>::iterator ite=Vehicles.begin(); ite!=Vehicles.end();++ite)//每一个key下面都是一个设备的所有参数
|
||||
{
|
||||
qDebug() << ite.value()
|
||||
<< "Next" << isNext;
|
||||
if(isNext)
|
||||
{
|
||||
|
||||
setVehicle(tr("Vehicle %1").arg(ite.key()));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ite.key() == vehicle)
|
||||
{
|
||||
isNext = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user