重新绑定通道名称
This commit is contained in:
parent
0da25401ac
commit
2c42a9eaa7
@ -66,6 +66,7 @@ void ConfigMgr::Save(QString & file_path) {
|
||||
channel_item["sampling_rate"] = ptr->base_config_[cid].sampling_rate;
|
||||
channel_item["power"] = ptr->base_config_[cid].power;
|
||||
channel_item["point_name"] = ptr->base_config_[cid].point_name;
|
||||
channel_item["chan_id"] = ptr->base_config_[cid].chan_id;
|
||||
QJsonArray voltage_range;
|
||||
voltage_range.append(ptr->base_config_[cid].normal_voltage_low);
|
||||
voltage_range.append(ptr->base_config_[cid].normal_voltage_high);
|
||||
@ -395,6 +396,7 @@ void ConfigMgr::Load(QString filename) {
|
||||
vib_data->base_config_[j].normal_voltage_high = voltage_range_array[1].toDouble();
|
||||
vib_data->base_config_[j].power = channel["power"].toBool();
|
||||
vib_data->base_config_[j].point_name = channel["point_name"].toString();
|
||||
vib_data->base_config_[j].chan_id = channel["chan_id"].toString();
|
||||
//setpoint
|
||||
QJsonObject setpoint_data = channel["setpoint"].toObject();
|
||||
vib_data->alert_danger[j].direct_upper = setpoint_data["direct_upper"].toDouble();
|
||||
|
@ -105,6 +105,7 @@ typedef enum {
|
||||
typedef struct {
|
||||
int id;
|
||||
QString point_name;
|
||||
QString chan_id;
|
||||
bool standby;
|
||||
bool active;
|
||||
int rack_type; // VibRackType
|
||||
|
@ -176,8 +176,8 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) {
|
||||
// 创建第三层子菜单:/HAM824 单板卡、三冗余板卡
|
||||
QAction *proximitor_1 = proximitor_menu->addAction("/HAM824 单板卡");
|
||||
proximitor_1->setData(kCardVibSingle);
|
||||
QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡");
|
||||
proximitor_2->setData(kCardVibTMRPrimary);
|
||||
//QAction *proximitor_2 = proximitor_menu->addAction("/HAM824 三冗余板卡");
|
||||
//proximitor_2->setData(kCardVibTMRPrimary);
|
||||
QAction *rpm_1 = rpm_menu->addAction("/OPM844 单板卡");
|
||||
rpm_1->setData(kCardSpeedSingle);
|
||||
// 创建第二层子菜单:/KPM834 键相模块
|
||||
@ -213,7 +213,7 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) {
|
||||
});
|
||||
// 连接所有菜单项
|
||||
QObject::connect(proximitor_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
QObject::connect(proximitor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
//QObject::connect(proximitor_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
QObject::connect(rpm_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
QObject::connect(relays_1, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
QObject::connect(relays_2, &QAction::triggered, this, &MainWindow::onMenuActionTriggered);
|
||||
@ -566,6 +566,7 @@ void MainWindow::on_pushButton_save_clicked() {
|
||||
return;
|
||||
QString file_name = filepath + "\\tsi_config_file.json";
|
||||
ConfigMgr::Instance()->Save(file_name);
|
||||
return;
|
||||
// 读取文件内容
|
||||
QFile file(file_name);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
|
@ -117,6 +117,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr<VibrationData> vib_data) {
|
||||
vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_1->value();
|
||||
vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_1->value();
|
||||
vib_data->base_config_[var].power = ui->checkBox_power_1->isChecked();
|
||||
vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
} else if (var + 1 == 2) {
|
||||
vib_data->base_config_[var].standby = ui->checkBox_standby_1->isChecked();
|
||||
vib_data->base_config_[var].active = ui->checkBox_enable_2->isChecked();
|
||||
@ -128,6 +129,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr<VibrationData> vib_data) {
|
||||
vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_2->value();
|
||||
vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_2->value();
|
||||
vib_data->base_config_[var].power = ui->checkBox_power_2->isChecked();
|
||||
vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
} else if (var + 1 == 3) {
|
||||
vib_data->base_config_[var].standby = ui->checkBox_standby_2->isChecked();
|
||||
vib_data->base_config_[var].active = ui->checkBox_enable_3->isChecked();
|
||||
@ -139,6 +141,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr<VibrationData> vib_data) {
|
||||
vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_3->value();
|
||||
vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_3->value();
|
||||
vib_data->base_config_[var].power = ui->checkBox_power_3->isChecked();
|
||||
vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
} else if (var + 1 == 4) {
|
||||
vib_data->base_config_[var].standby = ui->checkBox_standby_2->isChecked();
|
||||
vib_data->base_config_[var].active = ui->checkBox_enable_4->isChecked();
|
||||
@ -150,6 +153,7 @@ void Seismic_monitor::UpdateData(std::shared_ptr<VibrationData> vib_data) {
|
||||
vib_data->base_config_[var].normal_voltage_low = ui->doubleSpinBox_low_4->value();
|
||||
vib_data->base_config_[var].normal_voltage_high = ui->doubleSpinBox_high_4->value();
|
||||
vib_data->base_config_[var].power = ui->checkBox_power_4->isChecked();
|
||||
vib_data->base_config_[var].chan_id = QString("S%1C%2").arg(QString::number(slot_no, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
377
setpoint.cpp
377
setpoint.cpp
@ -56,185 +56,9 @@ void Setpoint::Init(){
|
||||
|
||||
switch (car_type) {
|
||||
case kCardVibSingle:{
|
||||
slider_direct->setRange(0,20);
|
||||
slider_1x_ampl->setRange(0,20);
|
||||
slider_2x_ampl->setRange(0,20);
|
||||
|
||||
int chan = ui->comboBox_chan->currentIndex();
|
||||
std::shared_ptr<VibrationData> setpoint_data = std::dynamic_pointer_cast<VibrationData>(base_ptr);
|
||||
std::vector<std::shared_ptr<VariableBase>> variable_ = setpoint_data->variables_;
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibRadial){
|
||||
for (int var = 0; var < variable_.size(); ++var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,150);
|
||||
slider_danger->setRange(0,150);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,400);
|
||||
slider_danger->setRange(0,400);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 4){
|
||||
slider_direct->setRange(0,500);
|
||||
slider_danger->setRange(0,500);
|
||||
}
|
||||
ui->label_direct->setText("um");
|
||||
ui->label_danger->setText("um");
|
||||
}
|
||||
}
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibAcc){
|
||||
std::shared_ptr<VariableBase> base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1);
|
||||
std::shared_ptr<AccVelVariable> av_ptr = std::dynamic_pointer_cast<AccVelVariable>(base_channel_ptr);
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 4){
|
||||
slider_direct->setRange(0,250);
|
||||
slider_danger->setRange(0,250);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 5){
|
||||
slider_direct->setRange(0,400);
|
||||
slider_danger->setRange(0,400);
|
||||
}
|
||||
ui->label_direct->setText("m/s^2 pk");
|
||||
ui->label_danger->setText("m/s^2 pk");
|
||||
}
|
||||
if(av_ptr->rms_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}
|
||||
ui->label_direct->setText("m/s^2 rms");
|
||||
ui->label_danger->setText("m/s^2 rms");
|
||||
}
|
||||
}
|
||||
if(av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,25);
|
||||
slider_danger->setRange(0,25);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}
|
||||
ui->label_direct->setText("mm/s pk");
|
||||
ui->label_danger->setText("mm/s pk");
|
||||
}
|
||||
}
|
||||
if(av_ptr->rms_active_ && av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,25);
|
||||
slider_danger->setRange(0,25);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s rms");
|
||||
ui->label_danger->setText("mm/s rms");
|
||||
}
|
||||
}
|
||||
}
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibVelocity){
|
||||
std::shared_ptr<VariableBase> base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1);
|
||||
std::shared_ptr<AccVelVariable> av_ptr = std::dynamic_pointer_cast<AccVelVariable>(base_channel_ptr);
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,10);
|
||||
slider_danger->setRange(0,10);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s pk");
|
||||
ui->label_danger->setText("mm/s pk");
|
||||
}
|
||||
if(av_ptr->rms_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,10);
|
||||
slider_danger->setRange(0,10);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s rms");
|
||||
ui->label_danger->setText("mm/s rms");
|
||||
}
|
||||
}
|
||||
if(av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,500);
|
||||
slider_danger->setRange(0,500);
|
||||
}
|
||||
ui->label_direct->setText("um pp");
|
||||
ui->label_danger->setText("um pp");
|
||||
}
|
||||
}
|
||||
}
|
||||
ui->lineEdit_direct_upper->setText(QString::number(setpoint_data->alert_danger[chan].direct_upper));
|
||||
ui->checkBox_direct->setChecked(setpoint_data->alert_danger[chan].direct_enable);
|
||||
if(setpoint_data->alert_danger[chan].direct_upper > 0){
|
||||
slider_direct->m_upper = setpoint_data->alert_danger[chan].direct_upper;
|
||||
}
|
||||
ui->lineEdit_1x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_upper));
|
||||
ui->lineEdit_1x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_lower));
|
||||
ui->checkBox_1x_ampl->setChecked(setpoint_data->alert_danger[chan].x1_ampl_enable);
|
||||
if(setpoint_data->alert_danger[chan].x1_ampl_upper > 0 && setpoint_data->alert_danger[chan].x1_ampl_lower > 0){
|
||||
slider_1x_ampl->m_upper = setpoint_data->alert_danger[chan].x1_ampl_upper;
|
||||
slider_1x_ampl->m_lower = setpoint_data->alert_danger[chan].x1_ampl_lower;
|
||||
}
|
||||
ui->lineEdit_2x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_upper));
|
||||
ui->lineEdit_2x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_lower));
|
||||
ui->checkBox_2x_ampl->setChecked(setpoint_data->alert_danger[chan].x2_ampl_enable);
|
||||
if(setpoint_data->alert_danger[chan].x2_ampl_upper > 0 && setpoint_data->alert_danger[chan].x2_ampl_lower > 0){
|
||||
slider_2x_ampl->m_upper = setpoint_data->alert_danger[chan].x2_ampl_upper;
|
||||
slider_2x_ampl->m_lower = setpoint_data->alert_danger[chan].x2_ampl_lower;
|
||||
}
|
||||
ui->lineEdit_danger_upper->setText(QString::number(setpoint_data->alert_danger[chan].danger_upper));
|
||||
ui->checkBox_danger->setChecked(setpoint_data->alert_danger[chan].danger_enable);
|
||||
if(setpoint_data->alert_danger[chan].danger_upper > 0){
|
||||
slider_danger->m_upper = setpoint_data->alert_danger[chan].danger_upper;
|
||||
slider_danger->m_lower = 0;
|
||||
}
|
||||
update();
|
||||
}break;
|
||||
}
|
||||
QObject::connect(ui->lineEdit_direct_upper, &QLineEdit::editingFinished, [&]() {
|
||||
@ -321,29 +145,184 @@ void Setpoint::onComboBoxIndexChanged(int index){
|
||||
vib_alert_ptr->alert_danger[current_index].danger_enable = ui->checkBox_danger->checkState();
|
||||
|
||||
current_index = index;
|
||||
|
||||
ui->lineEdit_direct_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].direct_upper));
|
||||
ui->checkBox_direct->setChecked(vib_alert_ptr->alert_danger[index].direct_enable);
|
||||
if(vib_alert_ptr->alert_danger[index].direct_upper > 0)
|
||||
slider_direct->m_upper = vib_alert_ptr->alert_danger[index].direct_upper;
|
||||
ui->lineEdit_1x_ampl_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].x1_ampl_upper));
|
||||
ui->lineEdit_1x_ampl_lower->setText(QString::number(vib_alert_ptr->alert_danger[index].x1_ampl_lower));
|
||||
ui->checkBox_1x_ampl->setChecked(vib_alert_ptr->alert_danger[index].x1_ampl_enable);
|
||||
if(vib_alert_ptr->alert_danger[index].x1_ampl_upper > 0 && vib_alert_ptr->alert_danger[index].x1_ampl_lower > 0){
|
||||
slider_1x_ampl->m_upper = vib_alert_ptr->alert_danger[index].x1_ampl_upper;
|
||||
slider_1x_ampl->m_lower = vib_alert_ptr->alert_danger[index].x1_ampl_lower;
|
||||
update();
|
||||
}
|
||||
void Setpoint::update()
|
||||
{
|
||||
int chan = ui->comboBox_chan->currentIndex();
|
||||
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
|
||||
std::shared_ptr<VibrationData> setpoint_data = std::dynamic_pointer_cast<VibrationData>(base_ptr);
|
||||
std::vector<std::shared_ptr<VariableBase>> variable_ = setpoint_data->variables_;
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibRadial){
|
||||
for (int var = 0; var < variable_.size(); ++var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,150);
|
||||
slider_danger->setRange(0,150);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,400);
|
||||
slider_danger->setRange(0,400);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 4){
|
||||
slider_direct->setRange(0,500);
|
||||
slider_danger->setRange(0,500);
|
||||
}
|
||||
ui->label_direct->setText("um");
|
||||
ui->label_danger->setText("um");
|
||||
}
|
||||
}
|
||||
ui->lineEdit_2x_ampl_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].x2_ampl_upper));
|
||||
ui->lineEdit_2x_ampl_lower->setText(QString::number(vib_alert_ptr->alert_danger[index].x2_ampl_lower));
|
||||
ui->checkBox_2x_ampl->setChecked(vib_alert_ptr->alert_danger[index].x2_ampl_enable);
|
||||
if(vib_alert_ptr->alert_danger[index].x2_ampl_upper > 0 && vib_alert_ptr->alert_danger[index].x2_ampl_lower > 0){
|
||||
slider_2x_ampl->m_upper = vib_alert_ptr->alert_danger[index].x2_ampl_upper;
|
||||
slider_2x_ampl->m_lower = vib_alert_ptr->alert_danger[index].x2_ampl_lower;
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibAcc){
|
||||
std::shared_ptr<VariableBase> base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1);
|
||||
std::shared_ptr<AccVelVariable> av_ptr = std::dynamic_pointer_cast<AccVelVariable>(base_channel_ptr);
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 4){
|
||||
slider_direct->setRange(0,250);
|
||||
slider_danger->setRange(0,250);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 5){
|
||||
slider_direct->setRange(0,400);
|
||||
slider_danger->setRange(0,400);
|
||||
}
|
||||
ui->label_direct->setText("m/s^2 pk");
|
||||
ui->label_danger->setText("m/s^2 pk");
|
||||
}
|
||||
if(av_ptr->rms_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 3){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}
|
||||
ui->label_direct->setText("m/s^2 rms");
|
||||
ui->label_danger->setText("m/s^2 rms");
|
||||
}
|
||||
}
|
||||
if(av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,25);
|
||||
slider_danger->setRange(0,25);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}
|
||||
ui->label_direct->setText("mm/s pk");
|
||||
ui->label_danger->setText("mm/s pk");
|
||||
}
|
||||
}
|
||||
if(av_ptr->rms_active_ && av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,25);
|
||||
slider_danger->setRange(0,25);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s rms");
|
||||
ui->label_danger->setText("mm/s rms");
|
||||
}
|
||||
}
|
||||
}
|
||||
ui->lineEdit_danger_upper->setText(QString::number(vib_alert_ptr->alert_danger[index].danger_upper));
|
||||
ui->checkBox_danger->setChecked(vib_alert_ptr->alert_danger[index].danger_enable);
|
||||
if(vib_alert_ptr->alert_danger[index].danger_upper > 0){
|
||||
slider_danger->m_upper = vib_alert_ptr->alert_danger[index].danger_upper;
|
||||
if(setpoint_data->base_config_[chan].channel_type == kVibVelocity){
|
||||
std::shared_ptr<VariableBase> base_channel_ptr = setpoint_data->GetChannelPtr(chan + 1);
|
||||
std::shared_ptr<AccVelVariable> av_ptr = std::dynamic_pointer_cast<AccVelVariable>(base_channel_ptr);
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,10);
|
||||
slider_danger->setRange(0,10);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s pk");
|
||||
ui->label_danger->setText("mm/s pk");
|
||||
}
|
||||
if(av_ptr->rms_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,10);
|
||||
slider_danger->setRange(0,10);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,20);
|
||||
slider_danger->setRange(0,20);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,50);
|
||||
slider_danger->setRange(0,50);
|
||||
}
|
||||
ui->label_direct->setText("mm/s rms");
|
||||
ui->label_danger->setText("mm/s rms");
|
||||
}
|
||||
}
|
||||
if(av_ptr->integrate_active_){
|
||||
for (int var = 0; var < variable_.size(); ++ var) {
|
||||
if(variable_[var]->direct_.full_scale_range == 0){
|
||||
slider_direct->setRange(0,100);
|
||||
slider_danger->setRange(0,100);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 1){
|
||||
slider_direct->setRange(0,200);
|
||||
slider_danger->setRange(0,200);
|
||||
}else if(variable_[var]->direct_.full_scale_range == 2){
|
||||
slider_direct->setRange(0,500);
|
||||
slider_danger->setRange(0,500);
|
||||
}
|
||||
ui->label_direct->setText("um pp");
|
||||
ui->label_danger->setText("um pp");
|
||||
}
|
||||
}
|
||||
}
|
||||
ui->lineEdit_direct_upper->setText(QString::number(setpoint_data->alert_danger[chan].direct_upper));
|
||||
ui->checkBox_direct->setChecked(setpoint_data->alert_danger[chan].direct_enable);
|
||||
if(setpoint_data->alert_danger[chan].direct_upper > 0){
|
||||
slider_direct->m_upper = setpoint_data->alert_danger[chan].direct_upper;
|
||||
}
|
||||
ui->lineEdit_1x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_upper));
|
||||
ui->lineEdit_1x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x1_ampl_lower));
|
||||
ui->checkBox_1x_ampl->setChecked(setpoint_data->alert_danger[chan].x1_ampl_enable);
|
||||
if(setpoint_data->alert_danger[chan].x1_ampl_upper > 0 && setpoint_data->alert_danger[chan].x1_ampl_lower > 0){
|
||||
slider_1x_ampl->m_upper = setpoint_data->alert_danger[chan].x1_ampl_upper;
|
||||
slider_1x_ampl->m_lower = setpoint_data->alert_danger[chan].x1_ampl_lower;
|
||||
}
|
||||
ui->lineEdit_2x_ampl_upper->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_upper));
|
||||
ui->lineEdit_2x_ampl_lower->setText(QString::number(setpoint_data->alert_danger[chan].x2_ampl_lower));
|
||||
ui->checkBox_2x_ampl->setChecked(setpoint_data->alert_danger[chan].x2_ampl_enable);
|
||||
if(setpoint_data->alert_danger[chan].x2_ampl_upper > 0 && setpoint_data->alert_danger[chan].x2_ampl_lower > 0){
|
||||
slider_2x_ampl->m_upper = setpoint_data->alert_danger[chan].x2_ampl_upper;
|
||||
slider_2x_ampl->m_lower = setpoint_data->alert_danger[chan].x2_ampl_lower;
|
||||
}
|
||||
ui->lineEdit_danger_upper->setText(QString::number(setpoint_data->alert_danger[chan].danger_upper));
|
||||
ui->checkBox_danger->setChecked(setpoint_data->alert_danger[chan].danger_enable);
|
||||
if(setpoint_data->alert_danger[chan].danger_upper > 0){
|
||||
slider_danger->m_upper = setpoint_data->alert_danger[chan].danger_upper;
|
||||
slider_danger->m_lower = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ private:
|
||||
std::shared_ptr<VibrationData> vib_alert_ptr = nullptr;
|
||||
int current_index;
|
||||
void Init();
|
||||
void update();
|
||||
};
|
||||
|
||||
#endif // SETPOINT_H
|
||||
|
@ -105,7 +105,7 @@ void SingleRelay::OnButtonGroup(QAbstractButton *slot_btn) {
|
||||
std::shared_ptr<VibrationData> vib_data = std::dynamic_pointer_cast<VibrationData>(base_ptr);
|
||||
if((vib_data->base_config_[var].standby && vib_data->base_config_[var + 1].standby && !(var % 2)))
|
||||
continue;
|
||||
QString item_str = QString("S%1C%2P##NO (Slot %3 Channel %4 Not OK)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1);
|
||||
QString item_str = QString("%1 (Slot %2 Channel %3 Not OK)").arg(vib_data->base_config_[var].point_name).arg(button_id).arg(var+1);
|
||||
QListWidgetItem *item = new QListWidgetItem(item_str);
|
||||
QString item_data = QString("S%1C%2P##NO").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
item->setData(Qt::UserRole, item_data);
|
||||
|
@ -17,7 +17,7 @@ TMRRelayAssociation::TMRRelayAssociation(int slot,int cardtype,QWidget *parent)
|
||||
}
|
||||
ui->label_slot_no->setText(QString::number(slot_no));
|
||||
QVBoxLayout *layout_available = new QVBoxLayout(ui->widget_available);
|
||||
list_widget_available = new DraggableListWidget;
|
||||
list_widget_available = new QListWidget();
|
||||
layout_available->addWidget(list_widget_available);
|
||||
list_widget_available->setDragEnabled(true);
|
||||
|
||||
@ -57,7 +57,7 @@ TMRRelayAssociation::TMRRelayAssociation(int slot,int cardtype,QWidget *parent)
|
||||
connect(treeView_relay,&QTreeView::customContextMenuRequested,this,&TMRRelayAssociation::on_treeView_Relay_customContextMenuRequested);
|
||||
current_index = ui->comboBox_relay_ch->currentIndex();
|
||||
Init();
|
||||
|
||||
onComboBoxIndexChanged(current_index);
|
||||
// QString expr = "((S01C01A1 + S01C02A1 + (S02C01A1 * S02C01A2)) * (S02C01A2 + S02C01A1 + (S02C01A1 + S02C01A2)) * (S02C01A1 * S02C01A2))";
|
||||
// setExpressionToTreeView(treeView_relay, expr);
|
||||
}
|
||||
@ -116,10 +116,37 @@ void TMRRelayAssociation::Init(){
|
||||
return;
|
||||
}
|
||||
relay_data = std::dynamic_pointer_cast<TmrrelayassociationData>(base_ptr);
|
||||
qDebug() << "logic" <<relay_data->tmr_relay[current_index].logic_expression;
|
||||
ui->checkBox_sgcc->setChecked(relay_data->sgcc_enable);
|
||||
setExpressionToTreeView(treeView_relay, relay_data->tmr_relay[current_index].logic_expression);
|
||||
|
||||
qDebug() << "logic" <<relay_data->tmr_relay[current_index].logic_expression;
|
||||
for(int i = 0 ; i < SLOT_NUM ; i++){
|
||||
std::shared_ptr<CardBase> cardbase_ptr = ConfigMgr::Instance()->GetSlotPtr(i + 1);
|
||||
if(cardbase_ptr != nullptr &&
|
||||
cardbase_ptr->card_type_ == kCardVibSingle){
|
||||
qDebug() << "i" << i;
|
||||
std::shared_ptr<VibrationData> ptr = std::dynamic_pointer_cast<VibrationData>(cardbase_ptr);
|
||||
for (int var = 0; var < CHANNEL_COUNT; ++var) {
|
||||
QString item_data,item_str;
|
||||
if(ptr->alert_danger[var].direct_enable ||
|
||||
ptr->alert_danger[var].x1_ampl_enable ||
|
||||
ptr->alert_danger[var].x2_ampl_enable){
|
||||
item_str = QString("%1 (槽位 %2 通道 %3 警报)").arg(ptr->base_config_[var].point_name).arg(ptr->base_config_[var].chan_id.mid(1,2)).arg(ptr->base_config_[var].chan_id.mid(4,2));
|
||||
item_data = QString("%1A1").arg(ptr->base_config_[var].chan_id);
|
||||
}
|
||||
if(ptr->alert_danger[var].danger_enable){
|
||||
item_str = QString("%1 (槽位 %2 通道 %3 危险)").arg(ptr->base_config_[var].point_name).arg(ptr->base_config_[var].chan_id.mid(1,2)).arg(ptr->base_config_[var].chan_id.mid(4,2));
|
||||
item_data = QString("%1A2").arg(ptr->base_config_[var].chan_id);
|
||||
}
|
||||
channelNameMap[item_data] = item_str;
|
||||
}
|
||||
}else if(cardbase_ptr != nullptr &&
|
||||
(cardbase_ptr->card_type_ == kCardSpeedSingle)){
|
||||
|
||||
}
|
||||
}
|
||||
ui->checkBox_sgcc->setChecked(relay_data->sgcc_enable);
|
||||
if(!relay_data->tmr_relay[current_index].logic_expression.isEmpty()){
|
||||
setExpressionToTreeView(treeView_relay, relay_data->tmr_relay[current_index].logic_expression);
|
||||
}
|
||||
}
|
||||
ExprNode* TMRRelayAssociation::parseExpression(const QString& expr, int& pos) {
|
||||
auto skipSpaces = [&]() {
|
||||
@ -174,7 +201,14 @@ ExprNode* TMRRelayAssociation::parseExpression(const QString& expr, int& pos) {
|
||||
}
|
||||
QStandardItem* TMRRelayAssociation::buildItemTree(ExprNode* node) {
|
||||
if (!node) return nullptr;
|
||||
QStandardItem* item = new QStandardItem(node->value);
|
||||
QString displayText;
|
||||
if (node->value == "+" || node->value == "*") {
|
||||
displayText = (node->value == "+") ? "OR" : "AND"; // 运算符显示
|
||||
} else {
|
||||
displayText = channelNameMap.value(node->value, node->value); // 显示名
|
||||
}
|
||||
QStandardItem* item = new QStandardItem(displayText);
|
||||
item->setData(node->value, Qt::UserRole); // 原始表达式key
|
||||
for (ExprNode* child : node->children) {
|
||||
item->appendRow(buildItemTree(child));
|
||||
}
|
||||
@ -193,7 +227,8 @@ QString TMRRelayAssociation::buildLogicExpression(QStandardItem *item) {
|
||||
if (!item) return "";
|
||||
|
||||
int childCount = item->rowCount();
|
||||
QString text = item->text().trimmed();
|
||||
QVariant userData = item->data(Qt::UserRole);
|
||||
QString text = userData.toString().trimmed();
|
||||
|
||||
if (childCount == 0) {
|
||||
// 叶子节点,直接返回表达式,比如 S01C01A1
|
||||
@ -360,28 +395,28 @@ void TMRRelayAssociation::OnButtonGroup(QAbstractButton *slot_btn) {
|
||||
int button_id = object_name.right(object_name.length() - 15).toInt();
|
||||
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(button_id);
|
||||
std::shared_ptr<VibrationData> ptr = std::dynamic_pointer_cast<VibrationData>(base_ptr);
|
||||
QString item_str = QString("*");
|
||||
QListWidgetItem *item_or = new QListWidgetItem("*");
|
||||
item_or->setData(Qt::UserRole, "*");
|
||||
list_widget_available->addItem(item_or);
|
||||
|
||||
QListWidgetItem *item_and = new QListWidgetItem("+");
|
||||
item_and->setData(Qt::UserRole, "+");
|
||||
QListWidgetItem *item_and = new QListWidgetItem("AND");
|
||||
item_and->setData(Qt::UserRole, "*");
|
||||
list_widget_available->addItem(item_and);
|
||||
|
||||
QListWidgetItem *item_or = new QListWidgetItem("OR");
|
||||
item_or->setData(Qt::UserRole, "+");
|
||||
list_widget_available->addItem(item_or);
|
||||
for(int var = 0; var < CHANNEL_COUNT ; ++var){
|
||||
QString item_data;
|
||||
if(ptr->alert_danger[var].direct_enable ||
|
||||
ptr->alert_danger[var].x1_ampl_enable ||
|
||||
ptr->alert_danger[var].x2_ampl_enable){
|
||||
QString item_str = QString("S%1C%2A1 (槽位 %3 通道 %4 警报)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1);
|
||||
QString item_str = QString("%1 (槽位 %3 通道 %4 警报)").arg(ptr->base_config_[var].point_name).arg(button_id).arg(var+1);
|
||||
QListWidgetItem *item = new QListWidgetItem(item_str);
|
||||
QString item_data = QString("S%1C%2A1").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
item_data = QString("S%1C%2A1").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
item->setData(Qt::UserRole, item_data);
|
||||
list_widget_available->addItem(item);
|
||||
}
|
||||
if(ptr->alert_danger[var].danger_enable){
|
||||
QString item_str = QString("S%1C%2A2 (槽位 %3 通道 %4 危险)").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')).arg(button_id).arg(var+1);
|
||||
QString item_str = QString("%1 (槽位 %3 通道 %4 危险)").arg(ptr->base_config_[var].point_name).arg(button_id).arg(var+1);
|
||||
QListWidgetItem *item = new QListWidgetItem(item_str);
|
||||
QString item_data = QString("S%1C%2A2").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
item_data = QString("S%1C%2A2").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0'));
|
||||
item->setData(Qt::UserRole, item_data);
|
||||
list_widget_available->addItem(item);
|
||||
}
|
||||
@ -404,9 +439,6 @@ void TMRRelayAssociation::on_pushButton_confirm_clicked()
|
||||
for (int i = 0; i < root->rowCount(); ++i) {
|
||||
QStandardItem *topItem = root->child(i);
|
||||
QString expr = buildLogicExpression(topItem);
|
||||
// if (!finalExpr.isEmpty()) {
|
||||
// finalExpr += " OR ";
|
||||
// }
|
||||
finalExpr += expr;
|
||||
}
|
||||
ExprValidationResult result = validateLogicExpression(finalExpr);
|
||||
@ -429,9 +461,6 @@ void TMRRelayAssociation::onComboBoxIndexChanged(int index){
|
||||
for (int i = 0; i < root->rowCount(); ++i) {
|
||||
QStandardItem *topItem = root->child(i);
|
||||
QString expr = buildLogicExpression(topItem);
|
||||
// if (!finalExpr.isEmpty()) {
|
||||
// finalExpr += " OR ";
|
||||
// }
|
||||
finalExpr += expr;
|
||||
}
|
||||
ExprValidationResult result = validateLogicExpression(finalExpr);
|
||||
|
@ -27,34 +27,64 @@ public:
|
||||
using QStandardItemModel::QStandardItemModel;
|
||||
|
||||
QStringList mimeTypes() const override {
|
||||
return { "application/x-custom" };
|
||||
// 支持自定义类型和 QListWidget 默认类型
|
||||
return { "application/x-custom", "application/x-qabstractitemmodeldatalist" };
|
||||
}
|
||||
|
||||
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||
int row, int column, const QModelIndex &parent) override {
|
||||
if (!data->hasFormat("application/x-custom"))
|
||||
int row, int column, const QModelIndex &parent) override {
|
||||
QStandardItem *parentItem = this->itemFromIndex(parent);
|
||||
if (!parentItem)
|
||||
parentItem = this->invisibleRootItem();
|
||||
|
||||
if (data->hasFormat("application/x-custom")) {
|
||||
QByteArray rawData = data->data("application/x-custom");
|
||||
QString customText = QString::fromUtf8(rawData);
|
||||
|
||||
QStandardItem *newItem = new QStandardItem(customText);
|
||||
newItem->setData(customText, Qt::UserRole); // 假设 data 也就是内容
|
||||
newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable |
|
||||
Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled);
|
||||
|
||||
if (row < 0)
|
||||
parentItem->appendRow(newItem);
|
||||
else
|
||||
parentItem->insertRow(row, newItem);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (data->hasFormat("application/x-qabstractitemmodeldatalist")) {
|
||||
QByteArray encoded = data->data("application/x-qabstractitemmodeldatalist");
|
||||
QDataStream stream(&encoded, QIODevice::ReadOnly);
|
||||
|
||||
while (!stream.atEnd()) {
|
||||
int r, c;
|
||||
QMap<int, QVariant> roleDataMap;
|
||||
stream >> r >> c >> roleDataMap;
|
||||
|
||||
QString text = roleDataMap.value(Qt::DisplayRole).toString();
|
||||
QVariant userData = roleDataMap.value(Qt::UserRole);
|
||||
|
||||
QStandardItem *newItem = new QStandardItem(text);
|
||||
newItem->setData(userData, Qt::UserRole); // 保留附加数据
|
||||
newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable |
|
||||
Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled);
|
||||
|
||||
if (row < 0)
|
||||
parentItem->appendRow(newItem);
|
||||
else
|
||||
parentItem->insertRow(row, newItem);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
QByteArray rawData = data->data("application/x-custom");
|
||||
QString customText = QString::fromUtf8(rawData);
|
||||
|
||||
QStandardItem *newItem = new QStandardItem(customText);
|
||||
newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable |
|
||||
Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled);
|
||||
|
||||
QStandardItem *parentItem = this->itemFromIndex(parent);
|
||||
if (!parentItem) parentItem = this->invisibleRootItem();
|
||||
|
||||
if (row < 0)
|
||||
parentItem->appendRow(newItem);
|
||||
else
|
||||
parentItem->insertRow(row, newItem);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Qt::DropActions supportedDropActions() const override {
|
||||
return Qt::CopyAction;
|
||||
return Qt::CopyAction | Qt::MoveAction;
|
||||
}
|
||||
};
|
||||
|
||||
@ -90,11 +120,12 @@ private slots:
|
||||
private:
|
||||
Ui::TMRRelayAssociation *ui;
|
||||
QButtonGroup * btnGroup_slot = nullptr;
|
||||
DraggableListWidget *list_widget_available = nullptr;
|
||||
QListWidget *list_widget_available = nullptr;
|
||||
int current_index;
|
||||
QTreeView *treeView_relay;
|
||||
QStandardItemModel *model_Relay;
|
||||
std::shared_ptr<TmrrelayassociationData> relay_data = nullptr;
|
||||
QMap<QString, QString> channelNameMap;
|
||||
|
||||
void Init();
|
||||
void buildTreeFromExpression(QTreeView *treeView, const QString &expr);
|
||||
|
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>821</width>
|
||||
<width>892</width>
|
||||
<height>634</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -186,7 +186,7 @@
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>538</y>
|
||||
<width>691</width>
|
||||
<width>751</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -980,38 +980,12 @@
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_and">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>540</x>
|
||||
<y>380</y>
|
||||
<width>51</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>与(+)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_or">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>540</x>
|
||||
<y>440</y>
|
||||
<width>51</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>或(*)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="widget_available" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>360</y>
|
||||
<width>301</width>
|
||||
<width>361</width>
|
||||
<height>161</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -1021,7 +995,7 @@
|
||||
<rect>
|
||||
<x>610</x>
|
||||
<y>80</y>
|
||||
<width>191</width>
|
||||
<width>251</width>
|
||||
<height>421</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
Loading…
x
Reference in New Issue
Block a user