Browse Source

update

master
zhaohe 1 year ago
parent
commit
2339f6adba
  1. 2
      disinfection_iflytop_can_protocol
  2. 67
      iflytop_canbus/iflytop_canbus_master.hpp
  3. 126
      src/mainwindow.cpp
  4. 15
      src/mainwindow.h
  5. 148
      src/mainwindow.ui

2
disinfection_iflytop_can_protocol

@ -1 +1 @@
Subproject commit 955c39e8b8aa1480b0846a1ae26aaa6ba4e38ce0
Subproject commit a2f3e075a7025f157f41abdf7f3133b1450a6313

67
iflytop_canbus/iflytop_canbus_master.hpp

@ -105,7 +105,6 @@ class IflytopCanbusMaster {
void pump_stop(int boardid, int subid);
void pump_set_ihold_irun_idelay(int boardid, int subid, int ihold, int irun, int idelay);
void pump_set_acc(int boardid, int subid, int acc);
void pump_set_subic_reg(int boardid, int subid, int regadd, int val);
int pump_get_subic_reg(int boardid, int subid, int regadd);
void pump_ping(int32_t boardid);
@ -115,18 +114,13 @@ class IflytopCanbusMaster {
// 气密性测试MINI真空泵
void atta_mini_air_compressor_ctrl(int boardid, int onoff) { callcmd1(boardid, kcmd_atta_mini_air_compressor_ctrl, onoff); }
//
int32_t pressure_sensor_bus_read_data(int boardid, int subid) {
callcmd1(boardid, kcmd_pressure_sensor_bus_read_data,subid);
callcmd1(boardid, kcmd_pressure_sensor_bus_read_data, subid);
return *(int32_t *)m_receipt_frame->params;
}
void pressure_sensor_bus_set_report_period_ms(int boardid, int periodms) { callcmd1(boardid, kcmd_pressure_sensor_bus_set_report_period_ms, periodms); }
void triple_warning_light_ctl(int boardid, int r, int g, int b, int warning) {
callcmd4(boardid, kcmd_triple_warning_light_ctl, r, g, b, warning);
}
int evaporation_bin_water_sensor_read_state(int boardid) {
void triple_warning_light_ctl(int boardid, int r, int g, int b, int warning) { callcmd4(boardid, kcmd_triple_warning_light_ctl, r, g, b, warning); }
int evaporation_bin_water_sensor_read_state(int boardid) {
callcmd0(boardid, kcmd_evaporation_bin_water_sensor_read_state);
return *(int32_t *)m_receipt_frame->params;
}
@ -136,6 +130,61 @@ class IflytopCanbusMaster {
return *(int32_t *)m_receipt_frame->params;
}
/***********************************************************************************************************************
* blower *
***********************************************************************************************************************/
void blower_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_blower_ctrl, power); }
void blower_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_blower_ctrl_safe_valve, valve_state); }
int blower_read_electric_current(int boardid) {
callcmd0(boardid, kcmd_blower_read_electric_current);
return *(int32_t *)m_receipt_frame->params;
}
/***********************************************************************************************************************
* air_compressor *
***********************************************************************************************************************/
void air_compressor_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_air_compressor_ctrl, power); }
void air_compressor_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_air_compressor_ctrl_safe_valve, valve_state); }
int air_compressor_read_electric_current(int boardid) {
callcmd0(boardid, kcmd_air_compressor_read_electric_current);
return *(int32_t *)m_receipt_frame->params;
}
/***********************************************************************************************************************
* heater *
***********************************************************************************************************************/
void heater_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_heater_ctrl, power); }
void heater_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_heater_ctrl_safe_valve, valve_state); }
int heater_read_electric_current(int boardid) {
callcmd0(boardid, kcmd_heater_read_electric_current);
return *(int32_t *)m_receipt_frame->params;
}
int heater_read_temperature_data(int boardid) {
callcmd0(boardid, kcmd_heater_read_temperature_data);
return *(int32_t *)m_receipt_frame->params;
}
/***********************************************************************************************************************
* h2o2_sensor *
***********************************************************************************************************************/
void h2o2_sensor_read_calibration_date(int boardid, int32_t *year, int32_t *month, int32_t *day) { //
callcmd0(boardid, kcmd_h2o2_sensor_read_calibration_date);
int32_t *p = (int32_t *)m_receipt_frame->params;
*year = *p;
*month = *(p + 1);
*day = *(p + 2);
}
int h2o2_sensor_read_sub_ic_errorcode(int boardid) {
callcmd0(boardid, kcmd_h2o2_sensor_read_sub_ic_errorcode);
return *(int32_t *)m_receipt_frame->params;
}
uint8_t *h2o2_sensor_read_sub_ic_reg(int boardid, int reg, int num) {
callcmd2(boardid, kcmd_h2o2_sensor_read_sub_ic_reg, reg, num);
return m_receipt_frame->params;
}
private:
void sendframe(int32_t from, int32_t to, uint8_t *frame, size_t len);

126
src/mainwindow.cpp

@ -27,8 +27,6 @@ using namespace iflytop;
static MainWindow *m_mainWindow;
static QTDataChannel G_QTDataChannel;
static int PublicState_DeviceIDVal = 0;
QT_REQUIRE_CONFIG(groupbox);
#define TAG "MainWindow"
@ -233,8 +231,6 @@ MainWindow::~MainWindow() { delete ui; }
void MainWindow::processException(const zexception &e) { //
ZQUI::ins()->ishow("%s", e.what());
}
int32_t MainWindow::getDeviceId() { return PublicState_DeviceIDVal; }
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
@ -356,36 +352,98 @@ void MainWindow::constructDrawBarDisinfectionBoxTab() { //
}
}
void MainWindow::construct_largeSpaceDisinfectionTab() {
void MainWindow::construct_largeSpaceDisinfectionTab(bool smallSpace) {
//
int targetId = kFixBoardId_LiquidCtrl;
ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "大空间消毒机");
ZQVTabPage *tab;
if (!smallSpace) {
tab = new ZQVTabPage(ui->buttonTabWidget, "大空间消毒机");
} else {
tab = new ZQVTabPage(ui->buttonTabWidget, "小空间消毒机");
}
{
ZQFunctionListBox *minpowerboard_box = new ZQFunctionListBox(tab, "液路板", 4);
ZQFunctionListBox *liquid_board = new ZQFunctionListBox(tab, "液路板", 4);
constructPumpControlUI(liquid_board, kFixBoardId_LiquidCtrl); // 泵机控制接口
liquid_board->newFunc("压力传感器总线-读数据", {"subid"}, //
[this](int argn, const char **args) {
int32_t val = IflytopCanbusMaster::ins()->pressure_sensor_bus_read_data(kFixBoardId_LiquidCtrl, atoi(args[0]));
ZQUI::ins()->ishow("val:%d", val);
});
liquid_board->newFunc("压力传感器总线-设置上报周期", {"periodms"}, //
[this](int argn, const char **args) { IflytopCanbusMaster::ins()->pressure_sensor_bus_set_report_period_ms(kFixBoardId_LiquidCtrl, atoi(args[0])); });
liquid_board->newFunc("报警灯控制", {"r", "g", "b", "w"}, //
[this](int argn, const char **args) { IflytopCanbusMaster::ins()->triple_warning_light_ctl(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3])); });
liquid_board->newFunc("读取-蒸发桶水浸传感器-状态", {}, //
[this](int argn, const char **args) {
int state = IflytopCanbusMaster::ins()->evaporation_bin_water_sensor_read_state(kFixBoardId_LiquidCtrl);
ZQUI::ins()->ishow("state:%d", state);
});
liquid_board->newFunc("读取-设备底部水浸传感器-状态", {}, //
[this](int argn, const char **args) {
int state = IflytopCanbusMaster::ins()->device_bottom_water_sensor_read_state(kFixBoardId_LiquidCtrl);
ZQUI::ins()->ishow("state:%d", state);
});
ZQFunctionListBox *powerboard = new ZQFunctionListBox(tab, "大功率板", 4);
powerboard->newFunc("风机控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->blower_ctrl(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("风机安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->blower_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("风机读取电流", {}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->blower_read_electric_current(kFixBoardId_PowerControl);
ZQUI::ins()->ishow("val:%d", val);
});
powerboard->newFunc("空压机控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->air_compressor_ctrl(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("空压机安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->air_compressor_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("空压机读取电流", {}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->air_compressor_read_electric_current(kFixBoardId_PowerControl);
ZQUI::ins()->ishow("val:%d", val);
});
powerboard->newFunc("加热器控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->heater_ctrl(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("加热器安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->heater_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); });
powerboard->newFunc("加热器读取电流", {}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->heater_read_electric_current(kFixBoardId_PowerControl);
ZQUI::ins()->ishow("val:%d", val);
});
powerboard->newFunc("加热器读取温度数据", {}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->heater_read_temperature_data(kFixBoardId_PowerControl);
ZQUI::ins()->ishow("val:%d", val);
});
powerboard->newFunc("H2O2传感器读取校准日期", {}, [this](int argn, const char **args) {
int32_t year, month, day;
IflytopCanbusMaster::ins()->h2o2_sensor_read_calibration_date(kFixBoardId_PowerControl, &year, &month, &day);
ZQUI::ins()->ishow("year:%d,month:%d,day:%d", year, month, day);
});
powerboard->newFunc("H2O2传感器读取IC错误码", {}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_errorcode(kFixBoardId_PowerControl);
ZQUI::ins()->ishow("val:%d", val);
});
powerboard->newFunc("H2O2传感器读取IC寄存器", {"reg", "num"}, [this](int argn, const char **args) {
uint8_t *val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_reg(kFixBoardId_PowerControl, atoi(args[0]), atoi(args[1]));
ZQUI::ins()->ishow("val:%s", zhex2str(val, atoi(args[1]) * 2).c_str());
});
}
}
void MainWindow::construct_H2O2ExtSensorBoardTab() {
ZQVTabPage *tab;
tab = new ZQVTabPage(ui->buttonTabWidget, "远端探头");
constructPumpControlUI(minpowerboard_box, targetId); // 泵机控制接口
minpowerboard_box->newFunc("压力传感器总线-读数据", {"subid"}, //
[this, targetId](int argn, const char **args) {
int32_t val = IflytopCanbusMaster::ins()->pressure_sensor_bus_read_data(targetId, atoi(args[0]));
ZQUI::ins()->ishow("val:%d", val);
});
minpowerboard_box->newFunc("压力传感器总线-设置上报周期", {"periodms"}, //
[this, targetId](int argn, const char **args) { IflytopCanbusMaster::ins()->pressure_sensor_bus_set_report_period_ms(targetId, atoi(args[0])); });
minpowerboard_box->newFunc("报警灯控制", {"r", "g", "b", "w"}, //
[this, targetId](int argn, const char **args) { IflytopCanbusMaster::ins()->triple_warning_light_ctl(targetId, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3])); });
minpowerboard_box->newFunc("读取-蒸发桶水浸传感器-状态", {}, //
[this, targetId](int argn, const char **args) {
int state = IflytopCanbusMaster::ins()->evaporation_bin_water_sensor_read_state(targetId);
ZQUI::ins()->ishow("state:%d", state);
});
minpowerboard_box->newFunc("读取-设备底部水浸传感器-状态", {}, //
[this, targetId](int argn, const char **args) {
int state = IflytopCanbusMaster::ins()->device_bottom_water_sensor_read_state(targetId);
ZQUI::ins()->ishow("state:%d", state);
});
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "远端探头板", 4);
box->newFunc("H2O2传感器读取校准日期", {"boardid"}, [this](int argn, const char **args) {
int32_t year, month, day;
IflytopCanbusMaster::ins()->h2o2_sensor_read_calibration_date(atoi(args[0]), &year, &month, &day);
ZQUI::ins()->ishow("year:%d,month:%d,day:%d", year, month, day);
});
box->newFunc("H2O2传感器读取IC错误码", {"boardid"}, [this](int argn, const char **args) {
int val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_errorcode(atoi(args[0]));
ZQUI::ins()->ishow("val:%d", val);
});
box->newFunc("H2O2传感器读取IC寄存器", {"boardid", "reg", "num"}, [this](int argn, const char **args) {
uint8_t *val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_reg(atoi(args[0]), atoi(args[1]), atoi(args[2]));
ZQUI::ins()->ishow("val:%s", zhex2str(val, atoi(args[2]) * 2).c_str());
});
}
}
@ -393,7 +451,9 @@ void MainWindow::constructAppUI() {
//
constructCommonOperationTab();
constructDrawBarDisinfectionBoxTab();
construct_largeSpaceDisinfectionTab();
construct_largeSpaceDisinfectionTab(false); // 大空间
construct_largeSpaceDisinfectionTab(true); // 小空间
construct_H2O2ExtSensorBoardTab();
}
void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen) {
@ -425,8 +485,8 @@ void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t t
else if (frame->function_id == kreport_h2o2_sensor_data) {
report_h2o2_data_t *ack = (report_h2o2_data_t *)frame->params;
QString info;
info.append(fmt("[H2O2 ][FROM:%03d] suid:%d,err:%d h2o2:%d (x10ppm),humid:%d (x10),temp:%d (x10),saturation:%d (x10)", //
from, ack->subid, ack->sensor_error, ack->h2o2, ack->humid, ack->temp, ack->saturation));
info.append(fmt("[H2O2 ][FROM:%03d] err:%d h2o2:%d (x10ppm),hum:%d (x10),temp:%d (x10),sat:%d (x10)", //
from, ack->sensor_error, ack->h2o2, ack->humid, ack->temp, ack->saturation));
ZQUI::ins()->rshow(info.toStdString().c_str());
}
//
@ -441,8 +501,6 @@ void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t t
}
}
void MainWindow::on_PublicState_ConfirmKey_clicked() { PublicState_DeviceIDVal = ui->PublicState_DeviceID->toPlainText().toInt(); }
void MainWindow::on_clearPreview_clicked() {
// ZQUI()->
}

15
src/mainwindow.h

@ -91,9 +91,6 @@ class MainWindow : public QMainWindow {
private slots:
void doinui_slot(QFunction);
void on_PublicState_ConfirmKey_clicked();
void on_clearPreview_clicked();
signals:
@ -124,13 +121,13 @@ class MainWindow : public QMainWindow {
void endAllocNewBox(QGroupBox *box);
void endAllocNewTab(QWidget *tab);
int32_t getDeviceId();
private:
void constructPumpControlUI(iflytop::ZQFunctionListBox *box, int targetDeviceId); // UI
void constructCommonOperationTab(); //
void constructDrawBarDisinfectionBoxTab(); // UI
void construct_largeSpaceDisinfectionTab(); // UI
void constructPumpControlUI(iflytop::ZQFunctionListBox *box, int targetDeviceId); // UI
void constructCommonOperationTab(); //
void constructDrawBarDisinfectionBoxTab(); // UI
void construct_largeSpaceDisinfectionTab(bool smallSpace); // UI
void construct_H2O2ExtSensorBoardTab(); // UI
void processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen); //
};
#endif // MAINWINDOW_H

148
src/mainwindow.ui

@ -598,7 +598,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
<widget class="QWidget" name="sidebar" native="true">
<property name="minimumSize">
<size>
<width>200</width>
<width>250</width>
<height>0</height>
</size>
</property>
@ -659,143 +659,6 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
</widget>
</item>
<item>
<widget class="QGroupBox" name="PublicStateBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="title">
<string>通用参数</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="PublicState_DeviceID_Lable">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>设备ID </string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QTextEdit" name="PublicState_DeviceID">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="lineWrapColumnOrWidth">
<number>2</number>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QPushButton" name="PublicState_ConfirmKey">
<property name="text">
<string>提交</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="PublicState_DeviceID_Lable_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>设备ID </string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QTextEdit" name="PublicState_DeviceID_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="lineWrapColumnOrWidth">
<number>2</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="StateGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@ -916,7 +779,12 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;------------板子ID------------------&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;&quot;&gt;主机                    1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;&quot;&gt;液路板                    2&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;&quot;&gt;电源板                    3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; color:#ff0000;&quot;&gt;拉杆箱箱消毒机&lt;/span&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;&quot;&gt;电源控制Mini板 4&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;&quot;&gt;外部球阀控制板             5&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@ -988,7 +856,7 @@ p, li { white-space: pre-wrap; }
</property>
<property name="minimumSize">
<size>
<width>600</width>
<width>700</width>
<height>0</height>
</size>
</property>

Loading…
Cancel
Save