Commit 63a45681f34e203e092b342ed67a8d59c0d1b77e

Authored by 고영탁
1 parent d16e913bdb
Exists in master and in 2 other branches fhd, fhd-demo

엔코더 기능 구현

 - 키보드 적용
app/gui/oven_control/config1digitsetandenablesetdlg.cpp
  1 +#include <QKeyEvent>
1 2 #include "config1digitsetandenablesetdlg.h"
2 3 #include "ui_config1digitsetandenablesetdlg.h"
3 4 #include "soundplayer.h"
... ... @@ -19,6 +20,9 @@ Config1DigitSetAndEnableSetDlg::Config1DigitSetAndEnableSetDlg(QWidget *parent,
19 20 ui->ctrSpBxValue->setValue(val);
20 21  
21 22 ui->ctrSpBxValue->installEventFilter(this);
  23 +
  24 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(keyEnter_clicked()));
  25 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(keyCancel_clicked()));
22 26 }
23 27  
24 28 Config1DigitSetAndEnableSetDlg::~Config1DigitSetAndEnableSetDlg()
... ... @@ -46,6 +50,67 @@ void Config1DigitSetAndEnableSetDlg::on_ctrBtnCancel_clicked()
46 50 close();
47 51 }
48 52  
  53 +void Config1DigitSetAndEnableSetDlg::keyCancel_clicked()
  54 +{
  55 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrSpBxValue->setValue(m_nPrevValue);
  56 + ui->keyboardwidget->focusOutKeyboard();
  57 +}
  58 +
  59 +void Config1DigitSetAndEnableSetDlg::keyEnter_clicked()
  60 +{
  61 + ui->keyboardwidget->focusOutKeyboard();
  62 +}
  63 +
49 64 int Config1DigitSetAndEnableSetDlg::getValue(){
50 65 return ui->ctrSpBxValue->value();
51 66 }
  67 +
  68 +
  69 +void Config1DigitSetAndEnableSetDlg::keyPressEvent(QKeyEvent *event){
  70 + int i = 0;
  71 + switch (event->key())
  72 + {
  73 + case 0x01000030: // Turn left
  74 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrBtnCancel->setFocus();
  75 + else focusPreviousChild();
  76 + break;
  77 + case 0x01000031: // Push
  78 +
  79 + break;
  80 + case 0x01000032: // Turn right
  81 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxValue->setFocus();
  82 + else focusNextChild();
  83 +
  84 + break;
  85 + }
  86 +}
  87 +
  88 +void Config1DigitSetAndEnableSetDlg::keyReleaseEvent(QKeyEvent *event){
  89 + int i = 0;
  90 + switch (event->key())
  91 + {
  92 + case 0x01000030: // Turn left
  93 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrBtnCancel->setFocus();
  94 + else focusPreviousChild();
  95 + break;
  96 + case 0x01000031: // Push
  97 + {
  98 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  99 + if(btn != NULL){
  100 + btn->click();
  101 + }
  102 + else{
  103 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  104 + if(spbx != NULL) {
  105 + m_nPrevValue = spbx->value();
  106 + ui->keyboardwidget->focusInKeyboard();
  107 + }
  108 + }
  109 + break;
  110 + }
  111 + case 0x01000032: // Turn right
  112 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxValue->setFocus();
  113 + else focusNextChild();
  114 + break;
  115 + }
  116 +}
... ...
app/gui/oven_control/config1digitsetandenablesetdlg.h
... ... @@ -34,9 +34,18 @@ private slots:
34 34  
35 35 void on_ctrBtnCancel_clicked();
36 36  
  37 +public slots:
  38 + void keyCancel_clicked();
  39 + void keyEnter_clicked();
  40 +
  41 +protected:
  42 + void keyReleaseEvent(QKeyEvent* event);
  43 + void keyPressEvent(QKeyEvent* event);
  44 +
37 45 private:
38 46 Ui::Config1DigitSetAndEnableSetDlg *ui;
39 47 custom_result m_nResult;
  48 + int m_nPrevValue;
40 49 };
41 50  
42 51 #endif // CONFIG1DIGITSETANDENABLESETDLG_H
... ...
app/gui/oven_control/config1digitsetandenablesetdlg.ui
... ... @@ -314,6 +314,12 @@ QPushButton::pressed, QPushButton::focus{
314 314 <container>1</container>
315 315 </customwidget>
316 316 </customwidgets>
  317 + <tabstops>
  318 + <tabstop>ctrSpBxValue</tabstop>
  319 + <tabstop>ctrBtnOk</tabstop>
  320 + <tabstop>ctrBtnOk_2</tabstop>
  321 + <tabstop>ctrBtnCancel</tabstop>
  322 + </tabstops>
317 323 <resources/>
318 324 <connections/>
319 325 </ui>
... ...
app/gui/oven_control/config1digitsetdlg.cpp
1 1 #include <QDebug>
  2 +#include <QKeyEvent>
2 3 #include "config1digitsetdlg.h"
3 4 #include "ui_config1digitsetdlg.h"
4 5 #include "soundplayer.h"
... ... @@ -16,6 +17,8 @@ Config1DigitSetDlg::Config1DigitSetDlg(QWidget *parent, ConfigType type) :
16 17 ui->setupUi(this);
17 18 this->setWindowFlags( Qt::FramelessWindowHint);
18 19 this->setAttribute( Qt::WA_DeleteOnClose);
  20 + qApp->setActiveWindow(this);
  21 + this->setFocus();
19 22  
20 23 foreach (QPushButton *button, findChildren<QPushButton *>())
21 24 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
... ... @@ -53,6 +56,9 @@ Config1DigitSetDlg::Config1DigitSetDlg(QWidget *parent, ConfigType type) :
53 56  
54 57 ui->ctrSpBxValue->installEventFilter(this);
55 58  
  59 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(keyEnter_clicked()));
  60 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(keyCancel_clicked()));
  61 +
56 62 }
57 63  
58 64 Config1DigitSetDlg::~Config1DigitSetDlg()
... ... @@ -83,3 +89,62 @@ bool Config1DigitSetDlg::eventFilter(QObject *object, QEvent *event){
83 89 }
84 90 return QWidget::eventFilter(object, event);
85 91 }
  92 +
  93 +void Config1DigitSetDlg::keyPressEvent(QKeyEvent *event){
  94 + int i = 0;
  95 + switch (event->key())
  96 + {
  97 + case 0x01000030: // Turn left
  98 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrBtnCancel->setFocus();
  99 + else focusPreviousChild();
  100 + break;
  101 + case 0x01000031: // Push
  102 +
  103 + break;
  104 + case 0x01000032: // Turn right
  105 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxValue->setFocus();
  106 + else focusNextChild();
  107 +
  108 + break;
  109 + }
  110 +}
  111 +
  112 +void Config1DigitSetDlg::keyReleaseEvent(QKeyEvent *event){
  113 + int i = 0;
  114 + switch (event->key())
  115 + {
  116 + case 0x01000030: // Turn left
  117 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrBtnCancel->setFocus();
  118 + else focusPreviousChild();
  119 + break;
  120 + case 0x01000031: // Push
  121 + {
  122 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  123 + if(btn != NULL){
  124 + btn->click();
  125 + }
  126 + else{
  127 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  128 + qDebug() << "grab keyboard";
  129 + if(spbx != NULL) {
  130 + m_nPrevValue = spbx->value();
  131 + ui->keyboardwidget->focusInKeyboard();
  132 + }
  133 + }
  134 + break;
  135 + }
  136 + case 0x01000032: // Turn right
  137 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxValue->setFocus();
  138 + else focusNextChild();
  139 + break;
  140 + }
  141 +}
  142 +
  143 +void Config1DigitSetDlg::keyCancel_clicked(){
  144 + if(focusWidget() == ui->ctrSpBxValue) ui->ctrSpBxValue->setValue(m_nPrevValue);
  145 + ui->keyboardwidget->focusOutKeyboard();
  146 +}
  147 +
  148 +void Config1DigitSetDlg::keyEnter_clicked(){
  149 + ui->keyboardwidget->focusOutKeyboard();
  150 +}
... ...
app/gui/oven_control/config1digitsetdlg.h
... ... @@ -25,9 +25,17 @@ private slots:
25 25  
26 26 bool eventFilter(QObject *, QEvent *);
27 27  
  28 + void keyCancel_clicked();
  29 + void keyEnter_clicked();
  30 +
  31 +protected:
  32 + void keyReleaseEvent(QKeyEvent* event);
  33 + void keyPressEvent(QKeyEvent* event);
  34 +
28 35 private:
29 36 Ui::Config1DigitSetDlg *ui;
30 37 ConfigType m_nType;
  38 + int m_nPrevValue;
31 39 };
32 40  
33 41 #endif // CONFIG1DIGITSETDLG_H
... ...
app/gui/oven_control/config1digitsetdlg.ui
... ... @@ -291,6 +291,11 @@ QPushButton::pressed, QPushButton::focus{
291 291 <container>1</container>
292 292 </customwidget>
293 293 </customwidgets>
  294 + <tabstops>
  295 + <tabstop>ctrSpBxValue</tabstop>
  296 + <tabstop>ctrBtnOk</tabstop>
  297 + <tabstop>ctrBtnCancel</tabstop>
  298 + </tabstops>
294 299 <resources/>
295 300 <connections/>
296 301 </ui>
... ...
app/gui/oven_control/configdatetimedlg.cpp
... ... @@ -33,8 +33,8 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) :
33 33 m_bInputState = true;
34 34  
35 35  
36   - connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(on_keyEnter_clicked()));
37   - connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(on_keyCancel_clicked()));
  36 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(keyEnter_clicked()));
  37 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(keyCancel_clicked()));
38 38  
39 39 m_pMapperSpins = new QSignalMapper(this);
40 40 m_pMapperSpins->setMapping(ui->ctrSpBxYear, ui->ctrSpBxYear);
... ... @@ -49,7 +49,7 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) :
49 49 connect(ui->ctrSpBxHour, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
50 50 connect(ui->ctrSpBxMin, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
51 51  
52   - connect(m_pMapperSpins, SIGNAL(mapped(QWidget*)), this, SLOT(on_focusInSpinBox(QWidget*)));
  52 + connect(m_pMapperSpins, SIGNAL(mapped(QWidget*)), this, SLOT(focusInSpinBox(QWidget*)));
53 53 }
54 54  
55 55 ConfigDateTimeDlg::~ConfigDateTimeDlg()
... ... @@ -128,7 +128,7 @@ void ConfigDateTimeDlg::keyReleaseEvent(QKeyEvent *event){
128 128 }
129 129 }
130 130  
131   -void ConfigDateTimeDlg::on_keyCancel_clicked(){
  131 +void ConfigDateTimeDlg::keyCancel_clicked(){
132 132 QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
133 133 if(spbx != NULL){
134 134 spbx->setValue(m_nFocusValue);
... ... @@ -136,11 +136,11 @@ void ConfigDateTimeDlg::on_keyCancel_clicked(){
136 136 ui->keyboardwidget->focusOutKeyboard();
137 137 }
138 138  
139   -void ConfigDateTimeDlg::on_keyEnter_clicked(){
  139 +void ConfigDateTimeDlg::keyEnter_clicked(){
140 140 ui->keyboardwidget->focusOutKeyboard();
141 141 }
142 142  
143   -void ConfigDateTimeDlg::on_focusInSpinBox(QWidget *widget){
  143 +void ConfigDateTimeDlg::focusInSpinBox(QWidget *widget){
144 144 QSpinBox *spbx = qobject_cast<QSpinBox*>(widget);
145 145 if(spbx != NULL){
146 146 m_nFocusValue = spbx->value();
... ...
app/gui/oven_control/configdatetimedlg.h
... ... @@ -25,10 +25,10 @@ private slots:
25 25  
26 26 void on_ctrBtnCancel_clicked();
27 27  
28   - void on_keyCancel_clicked();
29   - void on_keyEnter_clicked();
  28 + void keyCancel_clicked();
  29 + void keyEnter_clicked();
30 30  
31   - void on_focusInSpinBox(QWidget* widget);
  31 + void focusInSpinBox(QWidget* widget);
32 32  
33 33 protected:
34 34 void keyReleaseEvent(QKeyEvent* event);
... ...
app/gui/oven_control/configdoormonitoring.cpp
... ... @@ -168,5 +168,21 @@ void ConfigDoorMonitoring::keyPressEvent(QKeyEvent *event){
168 168 }
169 169  
170 170 void ConfigDoorMonitoring::keyReleaseEvent(QKeyEvent *event){
171   -
  171 + switch (event->key())
  172 + {
  173 + case 0x01000030: // Turn left
  174 + focusPreviousChild();
  175 + break;
  176 + case 0x01000031: // Push
  177 + {
  178 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  179 + if(btn != NULL){
  180 + btn->click();
  181 + }
  182 + break;
  183 + }
  184 + case 0x01000032: // Turn right
  185 + focusNextChild();
  186 + break;
  187 + }
172 188 }
... ...
app/gui/oven_control/configipdlg.cpp
  1 +#include <QKeyEvent>
1 2 #include "configipdlg.h"
2 3 #include "ui_configipdlg.h"
3 4 #include "config.h"
... ... @@ -13,6 +14,8 @@ ConfigIpDlg::ConfigIpDlg(QWidget *parent) :
13 14 setWindowFlags(Qt::FramelessWindowHint);
14 15 setAttribute(Qt::WA_NoSystemBackground);
15 16 setAttribute(Qt::WA_TranslucentBackground);
  17 + qApp->setActiveWindow(this);
  18 + this->setFocus();
16 19  
17 20 foreach (QPushButton *button, findChildren<QPushButton *>())
18 21 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
... ... @@ -51,6 +54,39 @@ ConfigIpDlg::ConfigIpDlg(QWidget *parent) :
51 54 ui->ctrNetmask_2->setValue(temp.d8.d8_2);
52 55 ui->ctrNetmask_3->setValue(temp.d8.d8_3);
53 56  
  57 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(keyEnter_clicked()));
  58 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(keyCancel_clicked()));
  59 +
  60 + m_pSignalMapper = new QSignalMapper(this);
  61 +
  62 + m_pSignalMapper->setMapping(ui->ctrIp_0,ui->ctrIp_0);
  63 + m_pSignalMapper->setMapping(ui->ctrIp_1,ui->ctrIp_1);
  64 + m_pSignalMapper->setMapping(ui->ctrIp_2,ui->ctrIp_2);
  65 + m_pSignalMapper->setMapping(ui->ctrIp_3,ui->ctrIp_3);
  66 + m_pSignalMapper->setMapping(ui->ctrGw_0,ui->ctrGw_0);
  67 + m_pSignalMapper->setMapping(ui->ctrGw_1,ui->ctrGw_1);
  68 + m_pSignalMapper->setMapping(ui->ctrGw_2,ui->ctrGw_2);
  69 + m_pSignalMapper->setMapping(ui->ctrGw_3,ui->ctrGw_3);
  70 + m_pSignalMapper->setMapping(ui->ctrNetmask_0,ui->ctrNetmask_0);
  71 + m_pSignalMapper->setMapping(ui->ctrNetmask_1,ui->ctrNetmask_1);
  72 + m_pSignalMapper->setMapping(ui->ctrNetmask_2,ui->ctrNetmask_2);
  73 + m_pSignalMapper->setMapping(ui->ctrNetmask_3,ui->ctrNetmask_3);
  74 +
  75 + connect(ui->ctrGw_0,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  76 + connect(ui->ctrGw_1,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  77 + connect(ui->ctrGw_2,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  78 + connect(ui->ctrGw_3,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  79 + connect(ui->ctrIp_0,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  80 + connect(ui->ctrIp_1,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  81 + connect(ui->ctrIp_2,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  82 + connect(ui->ctrIp_3,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  83 + connect(ui->ctrNetmask_0,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  84 + connect(ui->ctrNetmask_1,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  85 + connect(ui->ctrNetmask_2,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  86 + connect(ui->ctrNetmask_3,SIGNAL(focusInEdit()),m_pSignalMapper, SLOT(map()));
  87 +
  88 + connect(m_pSignalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(focusInSpinBox(QWidget*)));
  89 +
54 90 }
55 91  
56 92 ConfigIpDlg::~ConfigIpDlg()
... ... @@ -88,3 +124,66 @@ void ConfigIpDlg::on_ctrBtnCancel_clicked()
88 124 {
89 125 reject();
90 126 }
  127 +
  128 +void ConfigIpDlg::focusInSpinBox(QWidget *widget){
  129 + QSpinBox *spbx = qobject_cast<QSpinBox*>(widget);
  130 + if(spbx != NULL){
  131 + m_nFocusValue = spbx->value();
  132 + }
  133 +}
  134 +
  135 +void ConfigIpDlg::keyPressEvent(QKeyEvent *event){
  136 + switch (event->key())
  137 + {
  138 + case 0x01000030: // Turn left
  139 + if(focusWidget() == ui->ctrIp_0) ui->ctrBtnCancel->setFocus();
  140 + else focusPreviousChild();
  141 + break;
  142 + case 0x01000031: // Push
  143 +
  144 + break;
  145 + case 0x01000032: // Turn right
  146 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrIp_0->setFocus();
  147 + else focusNextChild();
  148 +
  149 + break;
  150 + }
  151 +}
  152 +
  153 +void ConfigIpDlg::keyReleaseEvent(QKeyEvent *event){
  154 + switch (event->key())
  155 + {
  156 + case 0x01000030: // Turn left
  157 + if(focusWidget() == ui->ctrIp_0) ui->ctrBtnCancel->setFocus();
  158 + else focusPreviousChild();
  159 + break;
  160 + case 0x01000031: // Push
  161 + {
  162 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  163 + if(btn != NULL){
  164 + btn->click();
  165 + }
  166 + else{
  167 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  168 + if(spbx != NULL) ui->keyboardwidget->focusInKeyboard();
  169 + }
  170 + break;
  171 + }
  172 + case 0x01000032: // Turn right
  173 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrIp_0->setFocus();
  174 + else focusNextChild();
  175 + break;
  176 + }
  177 +}
  178 +
  179 +void ConfigIpDlg::keyCancel_clicked(){
  180 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  181 + if(spbx != NULL){
  182 + spbx->setValue(m_nFocusValue);
  183 + }
  184 + ui->keyboardwidget->focusOutKeyboard();
  185 +}
  186 +
  187 +void ConfigIpDlg::keyEnter_clicked(){
  188 + ui->keyboardwidget->focusOutKeyboard();
  189 +}
... ...
app/gui/oven_control/configipdlg.h
... ... @@ -2,6 +2,7 @@
2 2 #define CONFIGIPDLG_H
3 3  
4 4 #include <QDialog>
  5 +#include <QSignalMapper>
5 6  
6 7 namespace Ui {
7 8 class ConfigIpDlg;
... ... @@ -20,8 +21,21 @@ private slots:
20 21  
21 22 void on_ctrBtnCancel_clicked();
22 23  
  24 + void keyCancel_clicked();
  25 + void keyEnter_clicked();
  26 +
  27 + void focusInSpinBox(QWidget* widget);
  28 +
23 29 private:
24 30 Ui::ConfigIpDlg *ui;
  31 +
  32 + QSignalMapper* m_pSignalMapper;
  33 + int m_nFocusValue;
  34 +
  35 +protected:
  36 + void keyReleaseEvent(QKeyEvent* event);
  37 + void keyPressEvent(QKeyEvent* event);
  38 +
25 39 };
26 40  
27 41 #endif // CONFIGIPDLG_H
... ...
app/gui/oven_control/configipdlg.ui
... ... @@ -665,6 +665,22 @@ QPushButton::pressed, QPushButton::focus{
665 665 <header>formatterspinbox.h</header>
666 666 </customwidget>
667 667 </customwidgets>
  668 + <tabstops>
  669 + <tabstop>ctrIp_0</tabstop>
  670 + <tabstop>ctrIp_1</tabstop>
  671 + <tabstop>ctrIp_2</tabstop>
  672 + <tabstop>ctrIp_3</tabstop>
  673 + <tabstop>ctrGw_0</tabstop>
  674 + <tabstop>ctrGw_1</tabstop>
  675 + <tabstop>ctrGw_2</tabstop>
  676 + <tabstop>ctrGw_3</tabstop>
  677 + <tabstop>ctrNetmask_0</tabstop>
  678 + <tabstop>ctrNetmask_1</tabstop>
  679 + <tabstop>ctrNetmask_2</tabstop>
  680 + <tabstop>ctrNetmask_3</tabstop>
  681 + <tabstop>ctrBtnOk</tabstop>
  682 + <tabstop>ctrBtnCancel</tabstop>
  683 + </tabstops>
668 684 <resources/>
669 685 <connections/>
670 686 </ui>
... ...
app/gui/oven_control/configwindow.cpp
... ... @@ -361,6 +361,17 @@ void ConfigWindow::on_pushButton_5_clicked()
361 361 void ConfigWindow::onDeleteFavoriteBtnClicked(uint16_t id){
362 362 Config* cfg = Config::getInstance();
363 363 ConfigFavoriteButton* btn;
  364 + m_vectorTabOrder.clear();
  365 + m_vectorTabOrder.append(this);
  366 + m_vectorTabOrder.append(ui->pushButton);
  367 + m_vectorTabOrder.append(ui->pushButton_8);
  368 + m_vectorTabOrder.append(ui->pushButton_7);
  369 + m_vectorTabOrder.append(ui->pushButton_2);
  370 + m_vectorTabOrder.append(ui->pushButton_4);
  371 + m_vectorTabOrder.append(ui->pushButton_5);
  372 + m_vectorTabOrder.append(ui->pushButton_6);
  373 + m_vectorTabOrder.append(ui->pushButton_3);
  374 +
364 375 for(int i = 0;i<m_vectorFavorMenuList.count();i++){
365 376 if(m_vectorFavorMenuList[i]->getBtnId() == id){
366 377 btn = m_vectorFavorMenuList[i];
... ... @@ -369,7 +380,15 @@ void ConfigWindow::onDeleteFavoriteBtnClicked(uint16_t id){
369 380 delete btn;
370 381 cfg->removeFavorite((ConfigType)id);
371 382 }
  383 + else{
  384 + m_vectorTabOrder.append(m_vectorFavorMenuList[i]->getBtn());
  385 + m_vectorTabOrder.append(m_vectorFavorMenuList[i]->getDelBtn());
  386 + }
372 387 }
  388 +
  389 + m_vectorTabOrder.append(ui->backButton);
  390 + m_vectorTabOrder.append(ui->washButton);
  391 + m_vectorTabOrder.append(ui->helpButton);
373 392 }
374 393  
375 394 void ConfigWindow::on_washButton_clicked()
... ...
app/gui/oven_control/engineermenuwindow.cpp
... ... @@ -16,6 +16,7 @@ EngineerMenuWindow::EngineerMenuWindow(QWidget *parent) :
16 16 ui(new Ui::EngineerMenuWindow)
17 17 {
18 18 ui->setupUi(this);
  19 + this->setFocus();
19 20  
20 21 ui->clockContainer->setParent(ui->upperStack);
21 22 setAttribute(Qt::WA_DeleteOnClose);
... ...
app/gui/oven_control/engineermenuwindow.ui
... ... @@ -613,6 +613,16 @@ QPushButton { color: rgb(255, 255, 255);text-align: left;padding-left:30px;}&lt;/st
613 613 <header>washwarnicon.h</header>
614 614 </customwidget>
615 615 </customwidgets>
  616 + <tabstops>
  617 + <tabstop>engAdjustButton</tabstop>
  618 + <tabstop>stdConfigButton</tabstop>
  619 + <tabstop>functionTestButton</tabstop>
  620 + <tabstop>serviceHistoryButton</tabstop>
  621 + <tabstop>realDataButton</tabstop>
  622 + <tabstop>operationTimeButton</tabstop>
  623 + <tabstop>modelTypeConfigButton</tabstop>
  624 + <tabstop>backButton</tabstop>
  625 + </tabstops>
616 626 <resources/>
617 627 <connections/>
618 628 </ui>
... ...
app/gui/oven_control/keyboardwidget.cpp
... ... @@ -249,7 +249,23 @@ void KeyboardWidget::on_pushButton_40_clicked()
249 249 }
250 250  
251 251 void KeyboardWidget::keyPressEvent(QKeyEvent *event){
252   -
  252 + switch (event->key())
  253 + {
  254 + case 0x01000030: // Turn left
  255 + if(m_nCurTabPos > 0 ) m_nCurTabPos--;
  256 + else m_nCurTabPos = m_vectorTabOrder.size()-1;
  257 + if(m_pCurCheckedBtn !=NULL) m_pCurCheckedBtn->setChecked(false);
  258 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  259 + m_pCurCheckedBtn->setChecked(true);
  260 + break;
  261 + case 0x01000032: // Turn right
  262 + if(m_nCurTabPos < (m_vectorTabOrder.size() -1)) m_nCurTabPos++;
  263 + else m_nCurTabPos=0;
  264 + if(m_pCurCheckedBtn !=NULL) m_pCurCheckedBtn->setChecked(false);
  265 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  266 + m_pCurCheckedBtn->setChecked(true);
  267 + break;
  268 + }
253 269 }
254 270  
255 271 void KeyboardWidget::keyReleaseEvent(QKeyEvent *event){
... ...
app/gui/oven_control/servicepassinputdlg.cpp
... ... @@ -14,13 +14,20 @@ ServicePassInputDlg::ServicePassInputDlg(QWidget *parent) :
14 14 setAttribute(Qt::WA_NoSystemBackground);
15 15 setAttribute(Qt::WA_TranslucentBackground);
16 16 setAttribute(Qt::WA_DeleteOnClose);
  17 + qApp->setActiveWindow(this);
  18 + ui->ctrProgressBar->setFocus();
  19 +
17 20 this->setResult(QDialog::Accepted);
18 21 foreach (QPushButton *button, findChildren<QPushButton *>())
19 22 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
20 23 ui->ctrProgressBar->setMaxProgress(0,MAX_PASSWORD);
21 24 m_nCurInputCount = 0;
22   - this->setFocus();
23 25 memset(m_strInputPass, 0x00, MAX_PASSWORD+1);
  26 + connect(ui->keyboardwidget,SIGNAL(onBackspaceKeyClicked()), SLOT(backspaceKeyPressEvent()));
  27 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), SLOT(keyEnter_clicked()));
  28 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()),SLOT(keyCancel_clicked()));
  29 + connect(ui->keyboardwidget,SIGNAL(onKeyboardClickSignal(QString)),SLOT(keyboardInputEvent(QString)));
  30 + ui->keyboardwidget->focusInKeyboard();
24 31 }
25 32  
26 33 ServicePassInputDlg::~ServicePassInputDlg()
... ... @@ -48,22 +55,71 @@ void ServicePassInputDlg::on_ctrBtnCancel_clicked()
48 55 reject();
49 56 }
50 57  
51   -void ServicePassInputDlg::keyPressEvent(QKeyEvent *event){
52   - if(event->key() == Qt::Key_Backspace){
53   - if(m_nCurInputCount>0) m_nCurInputCount--;
54   - m_strInputPass[m_nCurInputCount] = 0;
55   - qDebug() <<"back space input" << QString(m_strInputPass);
56   - ui->ctrProgressBar->setCurrentProgress(m_nCurInputCount);
57   - }
  58 +void ServicePassInputDlg::backspaceKeyPressEvent(){
  59 + if(m_nCurInputCount>0) m_nCurInputCount--;
  60 + m_strInputPass[m_nCurInputCount] = 0;
  61 + qDebug() <<"back space input" << QString(m_strInputPass);
  62 + ui->ctrProgressBar->setCurrentProgress(m_nCurInputCount);
58 63 }
59 64  
60   -void ServicePassInputDlg::inputMethodEvent(QInputMethodEvent *event){
  65 +void ServicePassInputDlg::keyboardInputEvent(QString strIn){
61 66 if(m_nCurInputCount < MAX_PASSWORD){
62   - if(!event->commitString().isEmpty()){
63   - const QChar* in = event->commitString().constData();
  67 + const QChar* in = strIn.constData();
64 68 m_strInputPass[m_nCurInputCount++] = in[0];
65 69 qDebug() <<"input event" << QString(m_strInputPass);
66 70 ui->ctrProgressBar->setCurrentProgress(m_nCurInputCount);
  71 + }
  72 +}
  73 +
  74 +void ServicePassInputDlg::keyPressEvent(QKeyEvent *event){
  75 + int i = 0;
  76 + switch (event->key())
  77 + {
  78 + case 0x01000030: // Turn left
  79 + if(focusWidget() == ui->ctrProgressBar) ui->ctrBtnCancel->setFocus();
  80 + else focusPreviousChild();
  81 + break;
  82 + case 0x01000031: // Push
  83 +
  84 + break;
  85 + case 0x01000032: // Turn right
  86 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrProgressBar->setFocus();
  87 + else focusNextChild();
  88 +
  89 + break;
  90 + }
  91 +}
  92 +
  93 +void ServicePassInputDlg::keyReleaseEvent(QKeyEvent *event){
  94 + int i = 0;
  95 + switch (event->key())
  96 + {
  97 + case 0x01000030: // Turn left
  98 + if(focusWidget() == ui->ctrProgressBar) ui->ctrBtnCancel->setFocus();
  99 + else focusPreviousChild();
  100 + break;
  101 + case 0x01000031: // Push
  102 + {
  103 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  104 + if(btn != NULL){
  105 + btn->click();
67 106 }
  107 + else{
  108 + ui->keyboardwidget->focusInKeyboard();
  109 + }
  110 + break;
  111 + }
  112 + case 0x01000032: // Turn right
  113 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrProgressBar->setFocus();
  114 + else focusNextChild();
  115 + break;
68 116 }
69 117 }
  118 +
  119 +void ServicePassInputDlg::keyCancel_clicked(){
  120 + ui->ctrBtnCancel->click();
  121 +}
  122 +
  123 +void ServicePassInputDlg::keyEnter_clicked(){
  124 + ui->ctrBtnOk->click();
  125 +}
... ...
app/gui/oven_control/servicepassinputdlg.h
... ... @@ -16,8 +16,6 @@ class ServicePassInputDlg : public QDialog
16 16 {
17 17 Q_OBJECT
18 18  
19   - void keyPressEvent(QKeyEvent *);
20   - void inputMethodEvent(QInputMethodEvent* event);
21 19  
22 20  
23 21 QChar m_strInputPass[MAX_PASSWORD+1];
... ... @@ -31,6 +29,16 @@ private slots:
31 29  
32 30 void on_ctrBtnCancel_clicked();
33 31  
  32 + void keyCancel_clicked();
  33 + void keyEnter_clicked();
  34 + void backspaceKeyPressEvent();
  35 +
  36 + void keyboardInputEvent(QString strIn);
  37 +
  38 +protected:
  39 + void keyPressEvent(QKeyEvent *event);
  40 + void keyReleaseEvent(QKeyEvent *event);
  41 +
34 42 private:
35 43 Ui::ServicePassInputDlg *ui;
36 44 int m_nCurInputCount;
... ...
app/gui/oven_control/servicepassinputdlg.ui
... ... @@ -157,6 +157,12 @@ QPushButton::pressed, QPushButton::focus{
157 157 <height>150</height>
158 158 </size>
159 159 </property>
  160 + <property name="focusPolicy">
  161 + <enum>Qt::TabFocus</enum>
  162 + </property>
  163 + <property name="styleSheet">
  164 + <string notr="true"/>
  165 + </property>
160 166 </widget>
161 167 </item>
162 168 </layout>
... ...