指令界面,反馈修正

This commit is contained in:
hm
2020-11-16 16:13:27 +08:00
parent 0a2678bd14
commit 39a8161451
5 changed files with 459 additions and 225 deletions
+37
View File
@@ -5,6 +5,12 @@ CommandButton::CommandButton(QWidget *parent) : QPushButton(parent)
}
CommandButton::~CommandButton()
{
}
void CommandButton::keyPressEvent(QKeyEvent* event)
{
QWidget::keyPressEvent(event);
@@ -14,5 +20,36 @@ void CommandButton::keyReleaseEvent(QKeyEvent* event)
QWidget::keyReleaseEvent(event);
}
void CommandButton::setParameters(QVariant row,
QVariant column,
QVariant notice,
QVariant command,
QVariant confirm,
QVariant page,
QVariant dialog,
QVariant param1,
QVariant param2,
QVariant param3,
QVariant param4,
QVariant param5,
QVariant param6,
QVariant param7)
{
m_row = row;
m_column = column;
m_notice = notice;
m_command = command;
m_confirm = confirm;
m_page = page;
m_dialog = dialog;
m_param1 = param1;
m_param2 = param2;
m_param3 = param3;
m_param4 = param4;
m_param5 = param5;
m_param6 = param6;
m_param7 = param7;
}
+188
View File
@@ -13,6 +13,171 @@ class CommandButton : public QPushButton
public:
explicit CommandButton(QWidget *parent = nullptr);
~CommandButton();
//============set==================
void setRow(QVariant value)
{
m_row = value;
}
void setColumn(QVariant value)
{
m_column = value;
}
void setNotice(QVariant value)
{
m_notice = value;
}
void setCommand(QVariant value)
{
m_command = value;
}
void setConfirm(QVariant value)
{
m_confirm = value;
}
void setPage(QVariant value)
{
m_page = value;
}
void setDialog(QVariant value)
{
m_dialog = value;
}
void setParam1(QVariant value)
{
m_param1 = value;
}
void setParam2(QVariant value)
{
m_param2 = value;
}
void setParam3(QVariant value)
{
m_param3 = value;
}
void setParam4(QVariant value)
{
m_param4 = value;
}
void setParam5(QVariant value)
{
m_param5 = value;
}
void setParam6(QVariant value)
{
m_param6 = value;
}
void setParam7(QVariant value)
{
m_param7 = value;
}
//===========get===================
QVariant Row(void)
{
return m_row;
}
QVariant Column(void)
{
return m_column;
}
QVariant Notice(void)
{
return m_notice;
}
QVariant Command(void)
{
return m_command;
}
QVariant Confirm(void)
{
return m_confirm;
}
QVariant Page(void)
{
return m_page;
}
QVariant Dialog(void)
{
return m_dialog;
}
QVariant Param1(void)
{
return m_param1;
}
QVariant Param2(void)
{
return m_param2;
}
QVariant Param3(void)
{
return m_param3;
}
QVariant Param4(void)
{
return m_param4;
}
QVariant Param5(void)
{
return m_param5;
}
QVariant Param6(void)
{
return m_param6;
}
QVariant Param7(void)
{
return m_param7;
}
public slots:
void setParameters(QVariant row,
QVariant column,
QVariant notice,
QVariant command,
QVariant confirm,
QVariant page,
QVariant dialog,
QVariant param1,
QVariant param2,
QVariant param3,
QVariant param4,
QVariant param5,
QVariant param6,
QVariant param7);
protected:
void keyPressEvent(QKeyEvent* event);
@@ -21,6 +186,29 @@ protected:
signals:
private:
QVariant m_row;
QVariant m_column;
QVariant m_notice;
QVariant m_command;
QVariant m_confirm;
QVariant m_page;
QVariant m_dialog;
QVariant m_param1;
QVariant m_param2;
QVariant m_param3;
QVariant m_param4;
QVariant m_param5;
QVariant m_param6;
QVariant m_param7;
};
#endif // COMMANDBUTTON_H
+226 -220
View File
@@ -4,9 +4,6 @@
#include "QtTextToSpeech/QtTextToSpeech"
//逻辑搞清楚,需要优化
CommandUI::CommandUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::CommandUI)
@@ -37,10 +34,6 @@ CommandUI::CommandUI(QWidget *parent) :
}
delete config;
QObjectList alist = ui->tabWidget_Command->children();
qDebug() << "alist" << alist;
setCommandFile(CommandFile);
DoubleClickTimer = new QTimer(this);
@@ -62,7 +55,6 @@ void CommandUI::wheelEvent(QWheelEvent *e)
void CommandUI::keyPressEvent(QKeyEvent *event) //键盘按下事件
{
switch(event->key())
{
case Qt::Key_Space :
@@ -135,9 +127,6 @@ void CommandUI::updateUI(void)
<< info.toObject().find(_TitleJsonKey).value().toString()
<< "Page";
}
//ui->tabWidget_Command->setCurrentIndex(info.toObject().find(_PageJsonKey).value().toInt());
}
QJsonArray BtnArray = info.toObject().find(_CommandsJsonKey).value().toArray();
@@ -149,6 +138,21 @@ void CommandUI::updateUI(void)
CommandButton *btn = new CommandButton(ui->tabWidget_Command->widget(info.toObject().find(_PageJsonKey).value().toInt()));
btn->setParameters(binfo.toObject().find(_rowJsonKey).value().toInt(),
binfo.toObject().find(_colunmJsonKey).value().toInt(),
binfo.toObject().find(_noticeJsonKey).value().toInt(),
binfo.toObject().find(_commandJsonKey).value().toInt(),
binfo.toObject().find(_confirmJsonKey).value().toInt(),
info.toObject().find(_PageJsonKey).value().toInt(),
binfo.toObject().find(_dialogJsonKey).value().toInt(),
binfo.toObject().find(_param1JsonKey).value().toInt(),
binfo.toObject().find(_param2JsonKey).value().toInt(),
binfo.toObject().find(_param3JsonKey).value().toInt(),
binfo.toObject().find(_param4JsonKey).value().toInt(),
binfo.toObject().find(_param5JsonKey).value().toInt(),
binfo.toObject().find(_param6JsonKey).value().toInt(),
binfo.toObject().find(_param7JsonKey).value().toInt());
btn->show();
@@ -186,7 +190,6 @@ void CommandUI::setCommandFile(QString File)
for(int i = 0;i < ui->tabWidget_Command->count();i++)
{
QObjectList wlist = ui->tabWidget_Command->widget(i)->children();
qDebug() << "wlist" << wlist;
foreach (QObject *b, wlist) {
CommandButton *btn = qobject_cast<CommandButton *>(b);
if(btn)
@@ -261,19 +264,31 @@ void CommandUI::setSecondConfirm(QVariant value)
{
if(value.toBool() == true)
{
QObjectList list = ui->tabWidget_Command->children();
for(int i = 0;i < ui->tabWidget_Command->count();i++)
{
QObjectList list = ui->tabWidget_Command->widget(i)->children();
foreach (QObject *obj, list) {
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
if(btn->text() == m_name)
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
}
}
foreach (QObject *obj, list) {
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
if((btn->text() == m_name)
&&(btn->Command() == m_command)
&&(btn->Confirm() == m_confirm)
&&(btn->Param1() == m_param1)
&&(btn->Param2() == m_param2)
&&(btn->Param3() == m_param3)
&&(btn->Param4() == m_param4)
&&(btn->Param5() == m_param5)
&&(btn->Param6() == m_param6)
&&(btn->Param7() == m_param7))
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
}
}
}
}
emit cmd_long(m_param1.toFloat(),
@@ -284,6 +299,7 @@ void CommandUI::setSecondConfirm(QVariant value)
m_param6.toFloat(),
m_param7.toFloat(),
m_command,m_confirm);
}
else
{
@@ -302,76 +318,80 @@ void CommandUI::setSecondConfirm(QVariant value)
void CommandUI::setSecondValue(QVariant value)
{
QObjectList list = ui->tabWidget_Command->children();
for(int i = 0;i < ui->tabWidget_Command->count();i++)
{
QObjectList list = ui->tabWidget_Command->widget(i)->children();
for(QJsonValue info: CMD_infoArray) {
if (!info.isObject()) {
return;
}
if(info.toObject().find(_TextJsonKey).value().toString() == m_name)
{
//找到要编辑的,然后把数字赋值过去
bool flag = false;
m_param1.toFloat(&flag);
if(!flag)
{
m_param1 = value;
}
m_param2.toFloat(&flag);
if(!flag)
{
m_param2 = value;
}
m_param3.toFloat(&flag);
if(!flag)
{
m_param3 = value;
}
m_param4.toFloat(&flag);
if(!flag)
{
m_param4 = value;
}
m_param5.toFloat(&flag);
if(!flag)
{
m_param5 = value;
}
m_param6.toFloat(&flag);
if(!flag)
{
m_param6 = value;
}
m_param7.toFloat(&flag);
if(!flag)
{
m_param7 = value;
}
}
}
foreach (QObject *obj, list) {
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
if(btn->text() == m_name)
foreach (QObject *obj, list) {
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
break;
if((btn->text() == m_name)
&&(btn->Command() == m_command)
&&(btn->Confirm() == m_confirm)
&&(btn->Param1() == m_param1)
&&(btn->Param2() == m_param2)
&&(btn->Param3() == m_param3)
&&(btn->Param4() == m_param4)
&&(btn->Param5() == m_param5)
&&(btn->Param6() == m_param6)
&&(btn->Param7() == m_param7))
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
}
}
}
}
}
//找到要编辑的,然后把数字赋值过去
bool flag = false;
m_param1.toFloat(&flag);
if(!flag)
{
m_param1 = value;
}
m_param2.toFloat(&flag);
if(!flag)
{
m_param2 = value;
}
m_param3.toFloat(&flag);
if(!flag)
{
m_param3 = value;
}
m_param4.toFloat(&flag);
if(!flag)
{
m_param4 = value;
}
m_param5.toFloat(&flag);
if(!flag)
{
m_param5 = value;
}
m_param6.toFloat(&flag);
if(!flag)
{
m_param6 = value;
}
m_param7.toFloat(&flag);
if(!flag)
{
m_param7 = value;
}
qDebug() << tr("clicked") << m_name
<< m_param1.toFloat()
<< m_param2.toFloat()
@@ -401,104 +421,81 @@ void CommandUI::on_commandClicked()
//找到消息的发送者
CommandButton *btn = qobject_cast<CommandButton *>(sender());
for(QJsonValue info: CMD_infoArray) {
if (!info.isObject()) {
return;
}
m_name = btn->text();
QJsonArray BtnArray = info.toObject().find(_CommandsJsonKey).value().toArray();
m_command = btn->Command().toInt();
m_confirm = btn->Confirm().toInt();
for(QJsonValue binfo: BtnArray) {
if (!binfo.isObject()) {
return;
}
m_param1 = btn->Param1();
m_param2 = btn->Param2();
m_param3 = btn->Param3();
m_param4 = btn->Param4();
m_param5 = btn->Param5();
m_param6 = btn->Param6();
m_param7 = btn->Param7();
//找到id或者名字一样的按键,找到参数,发出去
QString _name = binfo.toObject().find(_TextJsonKey).value().toString();
QString _text = btn->text();
uint32_t dialogValue = btn->Dialog().toInt();
if(dialogValue != 0)
{
if(dialogValue == 1)
{
//根据这个comfirm 确定要输入的参数
Confirm *confirmor = new Confirm(this);
confirmor->setGeometry(0,0,this->width(),this->height());
if(_name == _text)
{
m_name = _name;
//设置警告界面
confirmor->setNotice(btn->Notice().toString());
m_param1 = binfo.toObject().find(_param1JsonKey).value().toVariant();
m_param2 = binfo.toObject().find(_param2JsonKey).value().toVariant();
m_param3 = binfo.toObject().find(_param3JsonKey).value().toVariant();
m_param4 = binfo.toObject().find(_param4JsonKey).value().toVariant();
m_param5 = binfo.toObject().find(_param5JsonKey).value().toVariant();
m_param6 = binfo.toObject().find(_param6JsonKey).value().toVariant();
m_param7 = binfo.toObject().find(_param7JsonKey).value().toVariant();
connect(confirmor,SIGNAL(confirmValue(QVariant)),
this,SLOT(setSecondConfirm(QVariant)));
m_command = binfo.toObject().find(_commandJsonKey).value().toInt();
m_confirm = binfo.toObject().find(_confirmJsonKey).value().toInt();
confirmor->show();
}
else if(dialogValue == 2)
{
//value 确定要输入的参数
Inputter *inputter = new Inputter(this);
inputter->setGeometry(0,0,this->width(),this->height());
//如果confirm 不为0,那么弹出确认对话框
//设置警告界面
inputter->setLabel(btn->Notice());
uint32_t dialogValue = binfo.toObject().find(_dialogJsonKey).value().toInt();
if(dialogValue != 0)
{
if(dialogValue == 1)
{
//根据这个comfirm 确定要输入的参数
Confirm *confirmor = new Confirm(this);
confirmor->setGeometry(0,0,this->width(),this->height());
connect(inputter,SIGNAL(confirmValue(QVariant)),
this,SLOT(setSecondValue(QVariant)));
//设置警告界面
confirmor->setNotice(binfo.toObject().find(_noticeJsonKey).value().toString());
inputter->show();
}
connect(confirmor,SIGNAL(confirmValue(QVariant)),
this,SLOT(setSecondConfirm(QVariant)));
}
else
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
confirmor->show();
}
else if(dialogValue == 2)
{
//value 确定要输入的参数
Inputter *inputter = new Inputter(this);
inputter->setGeometry(0,0,this->width(),this->height());
emit cmd_long(m_param1.toFloat(),
m_param2.toFloat(),
m_param3.toFloat(),
m_param4.toFloat(),
m_param5.toFloat(),
m_param6.toFloat(),
m_param7.toFloat(),
m_command,m_confirm);
}
//设置警告界面
//inputter->setNotice(info.toObject().find(_noticeJsonKey).value().toString());
qDebug() << tr("clicked") << btn->text()
<< m_param1
<< m_param2
<< m_param3
<< m_param4
<< m_param5
<< m_param6
<< m_param7
<< m_command
<< m_confirm;
//inputter->setInitValue(info.toObject().find(_noticeJsonKey).value().toString());
connect(inputter,SIGNAL(confirmValue(QVariant)),
this,SLOT(setSecondValue(QVariant)));
inputter->show();
}
}
else
{
btn->setProperty("state",state::failure);
btn->style()->unpolish(btn);
btn->style()->polish(btn);
emit cmd_long(m_param1.toFloat(),
m_param2.toFloat(),
m_param3.toFloat(),
m_param4.toFloat(),
m_param5.toFloat(),
m_param6.toFloat(),
m_param7.toFloat(),
m_command,m_confirm);
}
qDebug() << tr("clicked") << btn->text()
<< m_param1
<< m_param2
<< m_param3
<< m_param4
<< m_param5
<< m_param6
<< m_param7
<< m_command
<< m_confirm;
}
}
}
}
@@ -508,59 +505,68 @@ void CommandUI::commandAccepted(bool flag,uint16_t command,uint8_t result)
bool isFundSender = false;
QString string;
//找到消息的发送者
QObjectList list = ui->tabWidget_Command->children();
if(command == m_command)
for(int i = 0;i < ui->tabWidget_Command->count();i++)
{
foreach (QObject *obj, list)
if(!ui->tabWidget_Command->widget(i))
{
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
QString btn_name = btn->text();
if(btn_name == m_name)//查到正在等待回复的按键
{
isFundSender = true;
if(flag)
{
btn->setProperty("state",state::success);
}
else
{
btn->setProperty("state",state::failure);
}
switch (result) {
case MAV_RESULT_ACCEPTED:
string.append(tr("%1,%2 accepted and executed").arg(command).arg(btn_name));
break;
case MAV_RESULT_TEMPORARILY_REJECTED:
string.append(tr("%1,%2 rejected").arg(command).arg(btn_name));
break;
case MAV_RESULT_DENIED:
string.append(tr("%1,%2 permanently denied").arg(command).arg(btn_name));
break;
case MAV_RESULT_UNSUPPORTED:
string.append(tr("%1,%2 unsupported").arg(command).arg(btn_name));
break;
case MAV_RESULT_FAILED:
string.append(tr("%1,%2 failed").arg(command).arg(btn_name));
break;
case MAV_RESULT_IN_PROGRESS:
string.append(tr("%1,%2 being executed").arg(command).arg(btn_name));
break;
default:
break;
}
btn->style()->unpolish(btn);
btn->style()->polish(btn);
}
}
continue;
}
QObjectList list = ui->tabWidget_Command->widget(i)->children();
if(command == m_command)
{
foreach (QObject *obj, list)
{
CommandButton *btn = qobject_cast<CommandButton *>(obj);
if(btn)
{
QString btn_name = btn->text();
if(btn_name == m_name)//查到正在等待回复的按键
{
isFundSender = true;
if(flag)
{
btn->setProperty("state",state::success);
}
else
{
btn->setProperty("state",state::failure);
}
switch (result) {
case MAV_RESULT_ACCEPTED:
string.append(tr("%1,%2 accepted and executed").arg(command).arg(btn_name));
break;
case MAV_RESULT_TEMPORARILY_REJECTED:
string.append(tr("%1,%2 rejected").arg(command).arg(btn_name));
break;
case MAV_RESULT_DENIED:
string.append(tr("%1,%2 permanently denied").arg(command).arg(btn_name));
break;
case MAV_RESULT_UNSUPPORTED:
string.append(tr("%1,%2 unsupported").arg(command).arg(btn_name));
break;
case MAV_RESULT_FAILED:
string.append(tr("%1,%2 failed").arg(command).arg(btn_name));
break;
case MAV_RESULT_IN_PROGRESS:
string.append(tr("%1,%2 being executed").arg(command).arg(btn_name));
break;
default:
break;
}
btn->style()->unpolish(btn);
btn->style()->polish(btn);
}
}
}
}
}
if(string.size() > 0)