Commit a7905269da91355ae5ac8cf920a35d122db536d8

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

설정 메뉴 화면 기본 구조 완성

- 설정 메뉴 화면 기본 구조 완성
app/gui/oven_control/config.cpp
1 1 #include <QDebug>
  2 +#include <QDateTime>
2 3 #include "config.h"
3 4  
4 5 using namespace Define;
... ... @@ -63,11 +64,45 @@ QString Config::getValueString(Define::ConfigType idx){
63 64 case 1:
64 65 qstrTemp.sprintf(config_format[(uint32_t)idx], configlist.values[(uint32_t)idx].f32);
65 66 break;
  67 + case 2:
  68 + qstrTemp = tr(config_format[(uint32_t)idx]);
66 69 }
  70 + return qstrTemp;
67 71 }
  72 +
  73 + QDateTime qdt = QDateTime::currentDateTime();
  74 +
68 75 switch(idx){
69 76 case config_language:
70   - qstrTemp = tr(language_menu[configlist.items.language.d32]);
  77 + if(configlist.items.language.d32 >=3) configlist.items.language.d32 = 0;
  78 + qstrTemp = tr(language_menu[configlist.items.language.d32]);
  79 + break;
  80 +
  81 + case config_datetime:
  82 + qstrTemp = qdt.toString("yyyy.MM.dd hh:mm");
  83 + break;
  84 +
  85 + case config_temptype:
  86 + if(configlist.items.temptype.d32 >=2 ) configlist.items.temptype.d32 = 0;
  87 + qstrTemp = tr(temptype_menu[configlist.items.temptype.d32]);
  88 + break;
  89 + case config_best_dish_weight:
  90 + if(configlist.items.best_dish_weight.d32 >=4) configlist.items.best_dish_weight.d32 = 0;
  91 + qstrTemp = tr(best_dish_weight_menu[configlist.items.best_dish_weight.d32]);
  92 + break;
  93 + case config_party_dish_weight:
  94 + if(configlist.items.party_dish_weight.d32 >=4) configlist.items.party_dish_weight.d32 = 0;
  95 + qstrTemp = tr(best_dish_weight_menu[configlist.items.party_dish_weight.d32]);
  96 + break;
  97 + case config_time_type:
  98 + if(configlist.items.time_type.d32 >=2) configlist.items.time_type.d32 = 0;
  99 + qstrTemp = tr(time_type_menu[configlist.items.time_type.d32]);
  100 + break;
  101 + case config_resttime_format:
  102 + if(configlist.items.resttime_format.d32 >=2) configlist.items.resttime_format.d32 = 0;
  103 + qstrTemp = tr(rest_time_type_menu[configlist.items.resttime_format.d32]);
  104 + break;
  105 + default:
71 106 break;
72 107 }
73 108 return qstrTemp;
... ...
app/gui/oven_control/config.h
... ... @@ -8,7 +8,7 @@
8 8 #define STRUCT_PACK __attribute__ ((packed))
9 9  
10 10  
11   -#define MAX_CONFIG_COUNT 14
  11 +#define MAX_CONFIG_COUNT 21
12 12  
13 13 namespace Define
14 14 {
... ... @@ -27,6 +27,14 @@ namespace Define
27 27 config_time_type,
28 28 config_resttime_format,
29 29 config_marster_vol,
  30 + config_keypad_sound1,
  31 + config_keypad_sound2,
  32 + config_request_loadexec,
  33 + config_programstep_finish,
  34 + config_cooktime_finish,
  35 + config_stoperror_distinguish,
  36 + config_sound_factory_reset,
  37 + config_invalid = 65535
30 38 };
31 39  
32 40 typedef union _config_item{
... ... @@ -58,6 +66,13 @@ namespace Define
58 66 config_item time_type;
59 67 config_item resttime_format;
60 68 config_item marster_vol;
  69 + config_item keypad_sound1;
  70 + config_item keypad_sound2;
  71 + config_item request_loadexec;
  72 + config_item programstep_finish;
  73 + config_item cooktime_finish;
  74 + config_item stoperror_distinguish;
  75 + config_item sound_factory_reset;
61 76 }items;
62 77 }STRUCT_PACK config_lists;
63 78 }
... ... @@ -79,15 +94,39 @@ class Config : public QObject
79 94 "English"
80 95 };
81 96  
  97 + const char temptype_menu[2][16]{
  98 + "섭씨(℃)\0",
  99 + "화씨(℉)\0"
  100 + };
  101 +
  102 + const char best_dish_weight_menu[4][16]={
  103 + "700g\0",
  104 + "700-899g\0",
  105 + "900-1099g\0",
  106 + "1100g"
  107 + };
  108 +
  109 + const char time_type_menu[2][16]={
  110 + "24h\0",
  111 + "am/pm\0"
  112 + };
  113 +
  114 + const char rest_time_type_menu[2][16] = {
  115 + "잔여시간\0",
  116 + "타겟시간\0"
  117 + };
82 118  
83   - /* config_data_type Description
84   - * 80 = Custom
  119 +
  120 +
  121 + /* config_data_type & Formatter Description
  122 + * 80 = use Cutom Formatter
85 123 * 0 = int
86 124 * 1 = float
  125 + * 2 = only String,
87 126 */
88 127 const uint8_t config_data_type[MAX_CONFIG_COUNT] = {
89   - 0x80, 0x80, 0x80, 0, 0, 0, 0, 0, 0, 0,
90   - 0x80,0x80,0x80,0
  128 + 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, //Settings
  129 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
91 130 };
92 131  
93 132 const char config_format_kr[MAX_CONFIG_COUNT][64]={
... ... @@ -101,10 +140,17 @@ class Config : public QObject
101 140 "%d",
102 141 "%d",
103 142 "%d min", //9
  143 + "%S", //10
104 144 "%S",
105   - "%S",
106   - "%S",
107   - "%d"
  145 + "%S", //end of Settings
  146 + "%d" ,//start of Sound
  147 + "%d번",
  148 + "%d번",
  149 + "%d번",
  150 + "%d번",
  151 + "%d번",
  152 + "%d번",
  153 + "공장초기화"
108 154 };
109 155  
110 156 char config_format[MAX_CONFIG_COUNT][64];
... ... @@ -119,11 +165,18 @@ class Config : public QObject
119 165 "연회용 접시무게",
120 166 "ILC 조리선반 개수",
121 167 "ILC 조리선반 순서",
122   - "ILC 조리 온습도 대기시간", //9
123   - "조리시간 포맷",
  168 + "ILC 조리 온습도 대기시간",
  169 + "조리시간 포맷", //10
124 170 "실시간 포맷",
125   - "잔여시간 포맷",
126   - "마스터 볼륨"
  171 + "잔여시간 포맷", //12
  172 + "마스터 볼륨", //13
  173 + "키패드 소리 - 1",
  174 + "키패드 소리 - 2 ", //15
  175 + "프로그램 단계 종료",
  176 + "적재/실행 요청",
  177 + "조리시간 종료",
  178 + "과정 중단/오류 식별", //19
  179 + "음향설정 초기화" //20
127 180 };
128 181  
129 182 QSet<uint32_t> m_setFavorite;
... ... @@ -152,8 +205,6 @@ public:
152 205  
153 206 Define::config_lists configlist;
154 207  
155   -
156   -
157 208 signals:
158 209  
159 210 public slots:
... ...
app/gui/oven_control/configwindow.cpp
... ... @@ -3,30 +3,45 @@
3 3  
4 4 #include "functiontestwindow.h"
5 5 #include "engineermenuwindow.h"
  6 +#include "config.h"
  7 +
  8 +
6 9  
7   -#include "configpanelbutton.h"
8 10  
9 11 ConfigWindow::ConfigWindow(QWidget *parent) :
10 12 QMainWindow(parent),
11 13 ui(new Ui::ConfigWindow)
12 14 {
  15 + uint32_t idx;
13 16 ui->setupUi(this);
14 17  
15 18 ui->clockContainer->setParent(ui->upperStack);
16 19 setAttribute(Qt::WA_DeleteOnClose);
17 20  
18 21 ui->scrollAreaMenuLayout->setAlignment(Qt::AlignTop);
  22 +
19 23 ConfigPanelButton *configbtn;
20   - for(int i = 0;i <20;i++){
21   - configbtn = new ConfigPanelButton(this,i);
22   - configbtn->showFavoriteButton();
23   - configbtn->setText("TEST");
24   - configbtn->setValue("test");
25   - ui->scrollAreaMenuLayout->addWidget(configbtn);
26   - connect(configbtn,SIGNAL(clicked(uint16_t)),SLOT(onConfigBtnClicked(uint16_t)));
  24 +// for(int i = 0;i <20;i++){
  25 +// configbtn = new ConfigPanelButton(this,i);
  26 +// configbtn->showFavoriteButton();
  27 +// configbtn->setText("TEST");
  28 +// configbtn->setValue("test");
  29 +// ui->scrollAreaMenuLayout->addWidget(configbtn);
  30 +// connect(configbtn,SIGNAL(clicked(uint16_t)),SLOT(onConfigBtnClicked(uint16_t)));
  31 +// }
  32 + Config* cfg = Config::getInstance();
  33 +
  34 + QSetIterator<uint32_t> itr = cfg->getConstBeginFavorite();
  35 + while(itr.hasNext()) itr.next();
  36 +
  37 + while(itr.hasPrevious()){
  38 + idx = itr.previous();
  39 + //configbtn = new ConfigPanelButton(this,idx);
27 40 }
28 41  
  42 + m_nCurConfigPos = config_menu_favorite;
29 43  
  44 + reloadUi();
30 45  
31 46 }
32 47  
... ... @@ -52,16 +67,60 @@ void ConfigWindow::on_pushButton_3_clicked()
52 67 w->showFullScreen();
53 68 }
54 69  
55   -void ConfigWindow::on_pushButton_8_clicked()
  70 +void ConfigWindow::on_pushButton_8_clicked() //설정 버튼
56 71 {
57   -
  72 + if(m_nCurConfigPos != config_menu_setting){
  73 + m_nCurConfigPos = config_menu_setting;
  74 + reloadUi();
  75 + }
58 76 }
59 77  
60 78 void ConfigWindow::onConfigBtnClicked(uint16_t id){
61   - qDebug() << "pressed id " << id;
  79 + qDebug() << "config id prsess : " << id;
62 80 }
63 81  
64 82  
65 83 void ConfigWindow::onConfigCheckBtnClicked(uint16_t id, bool checked){
66 84  
67 85 }
  86 +
  87 +void ConfigWindow::reloadUi(void){
  88 + QWidget** pws = m_vectorMenuList.data();
  89 + QWidget* pw;
  90 + ConfigPanelButton *pcb;
  91 + Config* cfg = Config::getInstance();
  92 + QString strtemp="";
  93 + for(int i = 0; i < m_vectorMenuList.count();i++){
  94 + pw = pws[i];
  95 + ui->scrollAreaMenuLayout->removeWidget(pw);
  96 + delete pw;
  97 + }
  98 + m_vectorMenuList.clear();
  99 +
  100 + if(m_nCurConfigPos != config_menu_favorite){
  101 + for(int i=0 ; i < m_arrMaxMenuCount[m_nCurConfigPos] ;i++){
  102 + pcb = new ConfigPanelButton(this,m_arrConfigListInfos[m_nCurConfigPos][i]);
  103 + qDebug() <<m_arrConfigListInfos[m_nCurConfigPos][i] << cfg->getTitleString(m_arrConfigListInfos[m_nCurConfigPos][i]);
  104 + strtemp = cfg->getTitleString(m_arrConfigListInfos[m_nCurConfigPos][i]);
  105 + pcb->setText(strtemp);
  106 + strtemp = cfg->getValueString(m_arrConfigListInfos[m_nCurConfigPos][i]);
  107 + pcb->setValue(strtemp);
  108 + pcb->showFavoriteButton();
  109 + pcb->setFavoriteCheck(cfg->isFavorite(m_arrConfigListInfos[m_nCurConfigPos][i]));
  110 + ui->scrollAreaMenuLayout->addWidget(pcb);
  111 + m_vectorMenuList.append(pcb);
  112 + connect(pcb ,SIGNAL(clicked(uint16_t)),SLOT(onConfigBtnClicked(uint16_t)));
  113 + }
  114 + }
  115 +
  116 + ui->scrollAreaMenu->adjustSize(); //Display 전 Contents 사이즈 수정 깜빡임 제거함.
  117 +
  118 +}
  119 +
  120 +void ConfigWindow::on_pushButton_7_clicked() //음향 관리
  121 +{
  122 + if(m_nCurConfigPos != config_menu_sound){
  123 + m_nCurConfigPos = config_menu_sound;
  124 + reloadUi();
  125 + }
  126 +}
... ...
app/gui/oven_control/configwindow.h
... ... @@ -2,8 +2,24 @@
2 2 #define CONFIGWINDOW_H
3 3  
4 4 #include <QMainWindow>
  5 +#include <QVector>
5 6  
6 7 #include "udphandler.h"
  8 +#include "configpanelbutton.h"
  9 +#include "config.h"
  10 +
  11 +using namespace Define;
  12 +
  13 +enum CONFIG_MENU_POS{
  14 + config_menu_favorite = -1,
  15 + config_menu_setting =0,
  16 + config_menu_sound,
  17 + config_menu_system,
  18 + config_menu_energy,
  19 + config_menu_expert,
  20 + config_menu_display,
  21 + config_menu_service
  22 +};
7 23  
8 24 namespace Ui {
9 25 class ConfigWindow;
... ... @@ -15,8 +31,19 @@ class ConfigWindow : public QMainWindow
15 31  
16 32 private:
17 33 const uint16_t m_arrMaxMenuCount[7] ={
18   - 9,7,
  34 + 9,8,0,
19 35 };
  36 + const Define::ConfigType m_arrConfigListInfos[7][20] = {
  37 + {config_language, config_datetime, config_temptype,config_backlight, config_stop_delay , config_best_dish_weight,config_party_dish_weight, config_time_type,config_resttime_format,},
  38 + {config_marster_vol,config_keypad_sound1,config_keypad_sound2,config_request_loadexec,config_programstep_finish,config_cooktime_finish,config_stoperror_distinguish,config_sound_factory_reset},
  39 + {config_invalid,},
  40 + {config_invalid,},
  41 + {config_invalid,},
  42 + {config_invalid,},
  43 + {config_invalid,}
  44 + };
  45 + void reloadUi(void);
  46 +
20 47 public:
21 48 explicit ConfigWindow(QWidget *parent = 0);
22 49 ~ConfigWindow();
... ... @@ -31,12 +58,16 @@ private slots:
31 58 void on_pushButton_8_clicked();
32 59  
33 60  
  61 + void on_pushButton_7_clicked();
  62 +
34 63 public slots:
35 64 void onConfigBtnClicked(uint16_t id);
36 65 void onConfigCheckBtnClicked(uint16_t id, bool checked);
37 66  
38 67 private:
39 68 Ui::ConfigWindow *ui;
  69 + QVector<QWidget *> m_vectorMenuList;
  70 + CONFIG_MENU_POS m_nCurConfigPos;
40 71 };
41 72  
42 73 #endif // CONFIGWINDOW_H
... ...
app/gui/oven_control/configwindow.ui
... ... @@ -30,6 +30,30 @@ font-size: 30px;
30 30 </string>
31 31 </property>
32 32 <widget class="QWidget" name="centralwidget">
  33 + <property name="styleSheet">
  34 + <string notr="true">QScrollBar:vertical {
  35 +border: none;
  36 +background: transparent;
  37 +width: 35px;
  38 +margin: 30px 15px 30px 0px;
  39 +}
  40 +QScrollBar::handle:vertical {
  41 +background: #B7B7B7;
  42 +border-radius: 10px;
  43 +min-height: 100px;
  44 +}
  45 +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
  46 +border: none;
  47 +background: none;
  48 +height: 0px;
  49 +}
  50 +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
  51 +border: none;
  52 +}
  53 +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
  54 +background: none;
  55 +}</string>
  56 + </property>
33 57 <widget class="QStackedWidget" name="upperStack">
34 58 <property name="geometry">
35 59 <rect>
... ... @@ -84,11 +108,20 @@ font-size: 30px;
84 108 </property>
85 109 <property name="styleSheet">
86 110 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_01.png); }
87   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_01_ov.png); }</string>
  111 +QPushButton:pressed, QPushButton:focus, QPushButton:checked { background-image: url(:/images/config/050_setting_btn_01_ov.png); }</string>
88 112 </property>
89 113 <property name="text">
90 114 <string>즐겨찾기</string>
91 115 </property>
  116 + <property name="checkable">
  117 + <bool>true</bool>
  118 + </property>
  119 + <property name="checked">
  120 + <bool>true</bool>
  121 + </property>
  122 + <property name="autoExclusive">
  123 + <bool>true</bool>
  124 + </property>
92 125 <property name="style" stdset="0">
93 126 <string>type</string>
94 127 </property>
... ... @@ -117,11 +150,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
117 150 </property>
118 151 <property name="styleSheet">
119 152 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_02.png); }
120   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_02_ov.png); }</string>
  153 +QPushButton:pressed, QPushButton:focus,QPushButton:checked { background-image: url(:/images/config/050_setting_btn_02_ov.png); }</string>
121 154 </property>
122 155 <property name="text">
123 156 <string>설정</string>
124 157 </property>
  158 + <property name="checkable">
  159 + <bool>true</bool>
  160 + </property>
  161 + <property name="autoExclusive">
  162 + <bool>true</bool>
  163 + </property>
125 164 <property name="style" stdset="0">
126 165 <string>type</string>
127 166 </property>
... ... @@ -150,11 +189,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
150 189 </property>
151 190 <property name="styleSheet">
152 191 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_03.png); }
153   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_03_ov.png); }</string>
  192 +QPushButton:pressed, QPushButton:focus, QPushButton:checked { background-image: url(:/images/config/050_setting_btn_03_ov.png); }</string>
154 193 </property>
155 194 <property name="text">
156 195 <string>음향 관리</string>
157 196 </property>
  197 + <property name="checkable">
  198 + <bool>true</bool>
  199 + </property>
  200 + <property name="autoExclusive">
  201 + <bool>true</bool>
  202 + </property>
158 203 <property name="style" stdset="0">
159 204 <string>type</string>
160 205 </property>
... ... @@ -183,11 +228,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
183 228 </property>
184 229 <property name="styleSheet">
185 230 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_04.png); }
186   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_04_ov.png); }</string>
  231 +QPushButton:pressed, QPushButton:focus,QPushButton:checked { background-image: url(:/images/config/050_setting_btn_04_ov.png); }</string>
187 232 </property>
188 233 <property name="text">
189 234 <string>시스템 관리</string>
190 235 </property>
  236 + <property name="checkable">
  237 + <bool>true</bool>
  238 + </property>
  239 + <property name="autoExclusive">
  240 + <bool>true</bool>
  241 + </property>
191 242 <property name="style" stdset="0">
192 243 <string>type</string>
193 244 </property>
... ... @@ -207,11 +258,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
207 258 </property>
208 259 <property name="styleSheet">
209 260 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_05.png); }
210   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_05_ov.png); }</string>
  261 +QPushButton:pressed, QPushButton:focus ,QPushButton:checked{ background-image: url(:/images/config/050_setting_btn_05_ov.png); }</string>
211 262 </property>
212 263 <property name="text">
213 264 <string>에너지 관리</string>
214 265 </property>
  266 + <property name="checkable">
  267 + <bool>true</bool>
  268 + </property>
  269 + <property name="autoExclusive">
  270 + <bool>true</bool>
  271 + </property>
215 272 <property name="style" stdset="0">
216 273 <string>type</string>
217 274 </property>
... ... @@ -240,11 +297,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
240 297 </property>
241 298 <property name="styleSheet">
242 299 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_06.png); }
243   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_06_ov.png); }</string>
  300 +QPushButton:pressed, QPushButton:focus,QPushButton:checked { background-image: url(:/images/config/050_setting_btn_06_ov.png); }</string>
244 301 </property>
245 302 <property name="text">
246 303 <string>전문가 설정</string>
247 304 </property>
  305 + <property name="checkable">
  306 + <bool>true</bool>
  307 + </property>
  308 + <property name="autoExclusive">
  309 + <bool>true</bool>
  310 + </property>
248 311 <property name="style" stdset="0">
249 312 <string>type</string>
250 313 </property>
... ... @@ -273,11 +336,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
273 336 </property>
274 337 <property name="styleSheet">
275 338 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_07.png); }
276   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_07_ov.png); }</string>
  339 +QPushButton:pressed, QPushButton:focus,QPushButton:checked { background-image: url(:/images/config/050_setting_btn_07_ov.png); }</string>
277 340 </property>
278 341 <property name="text">
279 342 <string>화면 관리</string>
280 343 </property>
  344 + <property name="checkable">
  345 + <bool>true</bool>
  346 + </property>
  347 + <property name="autoExclusive">
  348 + <bool>true</bool>
  349 + </property>
281 350 <property name="style" stdset="0">
282 351 <string>type</string>
283 352 </property>
... ... @@ -306,11 +375,17 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/0
306 375 </property>
307 376 <property name="styleSheet">
308 377 <string notr="true">QPushButton { background-image: url(:/images/config/050_setting_btn_08.png); }
309   -QPushButton:pressed, QPushButton:focus { background-image: url(:/images/config/050_setting_btn_08_ov.png); }</string>
  378 +QPushButton:pressed, QPushButton:focus ,QPushButton:checked{ background-image: url(:/images/config/050_setting_btn_08_ov.png); }</string>
310 379 </property>
311 380 <property name="text">
312 381 <string>서비스</string>
313 382 </property>
  383 + <property name="checkable">
  384 + <bool>true</bool>
  385 + </property>
  386 + <property name="autoExclusive">
  387 + <bool>true</bool>
  388 + </property>
314 389 <property name="style" stdset="0">
315 390 <string>type</string>
316 391 </property>
... ... @@ -410,7 +485,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }&lt;/str
410 485 </rect>
411 486 </property>
412 487 <property name="styleSheet">
413   - <string notr="true"/>
  488 + <string notr="true">background-color : transparent;</string>
414 489 </property>
415 490 <property name="frameShape">
416 491 <enum>QFrame::NoFrame</enum>
... ... @@ -446,9 +521,18 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }&lt;/str
446 521 <property name="sizeConstraint">
447 522 <enum>QLayout::SetDefaultConstraint</enum>
448 523 </property>
  524 + <property name="leftMargin">
  525 + <number>20</number>
  526 + </property>
  527 + <property name="topMargin">
  528 + <number>30</number>
  529 + </property>
449 530 <property name="rightMargin">
450 531 <number>0</number>
451 532 </property>
  533 + <property name="bottomMargin">
  534 + <number>26</number>
  535 + </property>
452 536 </layout>
453 537 </widget>
454 538 </widget>
... ...