检查界面可以根据不同的飞机导入不同的检查文件
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"comment": "Custom",
|
||||
"comment": "All",
|
||||
"version": 1,
|
||||
"spacing" : 20,
|
||||
|
||||
|
||||
+161
-44
@@ -8,6 +8,9 @@ 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";
|
||||
@@ -41,7 +44,6 @@ CheckUI::CheckUI(QWidget *parent) :
|
||||
if(!Dir->exists("./checks"))
|
||||
Dir->mkdir("./checks");//如果文件夹不存在就新建
|
||||
|
||||
|
||||
//load qss
|
||||
QFile file(":/qss/CheckUI.qss");
|
||||
file.open(QFile::ReadOnly);
|
||||
@@ -51,10 +53,26 @@ CheckUI::CheckUI(QWidget *parent) :
|
||||
file.close();
|
||||
|
||||
//载入json
|
||||
loadCommandJson(":/json/Check.json");
|
||||
|
||||
LoadCheckFiles("./checks");
|
||||
|
||||
//loadCommandJson(":/json/Check.json");
|
||||
//loadCommandJson("./json/Check.json");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CheckUI::~CheckUI()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::reBuild(void)
|
||||
{
|
||||
ui->gridLayout_Check->setSpacing(spacing);
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
@@ -62,7 +80,7 @@ CheckUI::CheckUI(QWidget *parent) :
|
||||
return;
|
||||
}
|
||||
|
||||
QPushButton *btn = new QPushButton(this);
|
||||
QPushButton *btn = new QPushButton(ui->frame_check);
|
||||
|
||||
btn->setText(info.toObject().find(_TextJsonKey).value().toString());
|
||||
|
||||
@@ -80,45 +98,13 @@ CheckUI::CheckUI(QWidget *parent) :
|
||||
connect(btn,SIGNAL(clicked(bool)),
|
||||
this,SLOT(on_commandClicked()));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
CheckUI::~CheckUI()
|
||||
void CheckUI::loadCommandJson(QJsonObject json)
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CheckUI::loadCommandJson(const QString& jsonFilename)
|
||||
{
|
||||
if (jsonFilename.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "Loading " << jsonFilename;
|
||||
|
||||
QFile jsonFile(jsonFilename);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qWarning() << "Unable to open file" << jsonFilename << jsonFile.errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
QJsonObject json = doc.object();
|
||||
version = json.value(_versionJsonKey).toInt();
|
||||
qDebug() << "command version :" << version;
|
||||
qDebug() << "check version :" << version;
|
||||
|
||||
|
||||
spacing = json.value(_spacingJsonKey).toInt();
|
||||
width = json.value(_WidthJsonKey).toInt();
|
||||
@@ -128,7 +114,7 @@ void CheckUI::loadCommandJson(const QString& jsonFilename)
|
||||
QJsonValue jsonValue = json.value(_ButtonJsonKey);
|
||||
|
||||
if (!jsonValue.isArray()) {
|
||||
qWarning() << jsonFilename << "Button not array";
|
||||
qWarning() << "Button not array";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -136,7 +122,7 @@ void CheckUI::loadCommandJson(const QString& jsonFilename)
|
||||
|
||||
for(QJsonValue info: infoArray) {
|
||||
if (!info.isObject()) {
|
||||
qWarning() << jsonFilename << "Array should contain objects";
|
||||
qWarning() << "Array should contain objects";
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -170,14 +156,28 @@ void CheckUI::loadCommandJson(const QString& jsonFilename)
|
||||
uint8_t confirm = info.toObject().find(_confirmJsonKey).value().toInt();
|
||||
|
||||
emit cmd_long(param1,param2, param3,param4,param5,param6,param7,command,confirm);
|
||||
|
||||
feedback(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CheckUI::feedback(bool flag)
|
||||
{
|
||||
QObjectList list = ui->frame_check->children();
|
||||
|
||||
foreach (QObject *obj, list)
|
||||
{
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
//qDebug() << btn->text();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckUI::RecieveMsg(mavlink_message_t msg)
|
||||
@@ -191,10 +191,6 @@ void CheckUI::RecieveMsg(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_HEARTBEAT: {
|
||||
mavlink_msg_heartbeat_decode(&msg,&heartbeat);
|
||||
|
||||
|
||||
|
||||
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_PING: {
|
||||
mavlink_msg_ping_decode(&msg,&ping);
|
||||
@@ -246,10 +242,131 @@ void CheckUI::RecieveMsg(mavlink_message_t msg)
|
||||
}
|
||||
|
||||
|
||||
//添加一个设备,
|
||||
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));
|
||||
|
||||
loadCommandJson(CheckFiles.value(sysid));
|
||||
reBuild();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
//从新载入一次文件
|
||||
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();
|
||||
|
||||
QHash<int,QString>::iterator ite;
|
||||
|
||||
for(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();
|
||||
}
|
||||
}
|
||||
|
||||
+26
-1
@@ -21,6 +21,10 @@
|
||||
#include "mavlinknode.h"
|
||||
|
||||
|
||||
#include "multiselector.h"
|
||||
#include "Selector.h"
|
||||
#include "Inputter.h"
|
||||
#include "CharInputter.h"
|
||||
|
||||
namespace Ui {
|
||||
class CheckUI;
|
||||
@@ -54,13 +58,29 @@ public slots:
|
||||
void feedback(bool flag);
|
||||
void RecieveMsg(mavlink_message_t msg);
|
||||
|
||||
void addVehicles(int sysid, int compid);
|
||||
|
||||
|
||||
private slots:
|
||||
|
||||
void setVehicle(QVariant value);
|
||||
|
||||
void on_commandClicked();
|
||||
|
||||
|
||||
|
||||
|
||||
void on_pushButton_Vehicle_clicked();
|
||||
|
||||
protected:
|
||||
|
||||
void loadCommandJson(const QString& jsonFilename);
|
||||
QJsonObject parseCheckfiles(const QString& jsonFilename);
|
||||
|
||||
void LoadCheckFiles(QString path);
|
||||
|
||||
void reBuild(void);
|
||||
|
||||
void loadCommandJson(QJsonObject jsonFilename);
|
||||
|
||||
private:
|
||||
|
||||
@@ -90,6 +110,7 @@ private:
|
||||
static const char* _spacingJsonKey;
|
||||
|
||||
static const char* _commentJsonKey;
|
||||
static const char* _vehicleJsonKey;
|
||||
static const char* _ButtonJsonKey;
|
||||
|
||||
static const char* _WidthJsonKey;
|
||||
@@ -121,6 +142,10 @@ private:
|
||||
|
||||
|
||||
|
||||
QHash<int,QJsonObject> CheckFiles;// vehicle,check
|
||||
|
||||
QHash<int,QString> Vehicles;
|
||||
|
||||
|
||||
Ui::CheckUI *ui;
|
||||
};
|
||||
|
||||
@@ -7,7 +7,10 @@ QT += quickwidgets
|
||||
QT += quick
|
||||
QT += qml
|
||||
|
||||
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/CharInputter
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/Inputter
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/MultiSelector
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/Selector
|
||||
|
||||
FORMS += \
|
||||
$$PWD/CheckUI.ui
|
||||
|
||||
@@ -18,7 +18,7 @@ QPushButton {
|
||||
border-style: solid;
|
||||
border-radius: 5;
|
||||
padding: 3px;
|
||||
font: 20px "Arial";
|
||||
font: 15px "Arial";
|
||||
}
|
||||
|
||||
QPushButton:pressed[CheckState="0"] {
|
||||
|
||||
+124
-26
@@ -13,35 +13,133 @@
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QPushButton" name="pushButton_Previous">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Previous</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="pushButton_Vehicle">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="pushButton_Next">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Next</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_Check"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<item row="1" column="1">
|
||||
<widget class="QFrame" name="frame_check">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</spacer>
|
||||
<layout class="QGridLayout" name="gridLayout_">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_Check">
|
||||
<property name="leftMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>511</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
Reference in New Issue
Block a user