#include "vvodms.h" #include "ui_vvodms.h" vvodMs::vvodMs(QWidget *parent) : QDialog(parent), ui(new Ui::vvodMs) { ui->setupUi(this); this->setAttribute(Qt::WA_DeleteOnClose); ((Widget*)parent)->changeOpenWidget(this); int i; for (i=0; i<80; i++) localLE[i] = new QLineEdit(this); for (i=0; i<6; i++) { localLE[i*8] ->setGeometry(30, 140+20*i, 31, 20); localLE[i*8+1]->setGeometry(90, 140+20*i, 31, 20); localLE[i*8+2]->setGeometry(160, 140+20*i, 31, 20); localLE[i*8+3]->setGeometry(220, 140+20*i, 31, 20); localLE[i*8+4]->setGeometry(320, 140+20*i, 31, 20); localLE[i*8+5]->setGeometry(380, 140+20*i, 31, 20); localLE[i*8+6]->setGeometry(440, 140+20*i, 31, 20); localLE[i*8+7]->setGeometry(500, 140+20*i, 31, 20); } for (i=0; i<4; i++) { localLE[i*8+48] ->setGeometry(30, 280+20*i, 31, 20); localLE[i*8+48+1]->setGeometry(90, 280+20*i, 31, 20); localLE[i*8+48+2]->setGeometry(160, 280+20*i, 31, 20); localLE[i*8+48+3]->setGeometry(220, 280+20*i, 31, 20); localLE[i*8+48+4]->setGeometry(320, 280+20*i, 31, 20); localLE[i*8+48+5]->setGeometry(380, 280+20*i, 31, 20); localLE[i*8+48+6]->setGeometry(440, 280+20*i, 31, 20); localLE[i*8+48+7]->setGeometry(500, 280+20*i, 31, 20); } for (i=76; i<80; i++) localLE[i]->hide(); localLE[52]->setEnabled(false); localLE[56]->setEnabled(false); localLE[60]->setEnabled(false); localLE[64]->setEnabled(false); localLE[68]->setEnabled(false); localLE[72]->setEnabled(false); setTabOrder(ui->lineEdit_6, localLE[0]); for (i=1;i<76;i++) setTabOrder(localLE[i-1], localLE[i]); setTabOrder(localLE[75], ui->lineEdit_103); setTabOrder(ui->lineEdit_103, ui->lineEdit_98); int n=0; meteoSr = ((Widget*)parent)->metSr; // "метео-11" пропускаем, номер зоны ui->lineEdit->setText(meteoSr.mid(0, 2)); // день ui->lineEdit_2->setText(meteoSr.mid(2,2)); // время n = meteoSr.mid(4, 3).toInt(); ui->lineEdit_3->setText(QString::number(n)+"0"); // высота n = meteoSr.mid(7, 4).toInt(); ui->lineEdit_4->setText(QString::number(n)); // Откл. давления n = meteoSr.mid(11, 3).toInt(); if ( n>499) n = 500 - n; ui->lineEdit_5->setText(QString::number(n)); // Откл. температуры n = meteoSr.mid(14,2).toInt(); if (n>49) n = 50-n; ui->lineEdit_6->setText(QString::number(n)); // стандартный набор: откл. давления, темп, угол ветра, скор. ветра for (i=0; i<13; i++) { localLE[i*4]->setText(meteoSr.mid(16+i*8, 2)); n = meteoSr.mid(18+i*8, 2).toInt(); if (n>49) n = 50-n; localLE[i*4+1]->setText(QString::number(n)); localLE[i*4+2]->setText(meteoSr.mid(20+i*8, 2)); localLE[i*4+3]->setText(meteoSr.mid(22+i*8, 2)); } // для верхних зон нет откл. давления - принимается 1% for (int i=13; i<19; i++) { n = meteoSr.mid(120+(i-13)*6, 2).toInt(); if (n>49) n = 50-n; localLE[i*4+1]->setText(QString::number(n)); localLE[i*4+2]->setText(meteoSr.mid(122+(i-13)*6, 2)); localLE[i*4+3]->setText(meteoSr.mid(124+(i-13)*6, 2)); } // высоты темп. и ветрового зондирования ui->lineEdit_103->setText(meteoSr.right(4).left(2)+"00"); ui->lineEdit_98->setText(meteoSr.right(2)+"00"); } vvodMs::~vvodMs() { delete ui; } void vvodMs::on_pushButton_2_clicked() { close(); } void vvodMs::on_pushButton_clicked() { QString str; meteoSr.clear(); int tmp, tmp1; // str.append(QString::fromLocal8Bit("Метео-11")); // номер станции tmp = ui->lineEdit->text().toInt(); if (tmp<0) tmp=0; else if (tmp>99) tmp=99; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); // день час минуты tmp = ui->lineEdit_2->text().toInt(); if (tmp<0) tmp =0; else if (tmp>31) tmp=31; str.append(QString::number(tmp)); tmp = ui->lineEdit_3->text().toInt(); if (tmp<0) tmp =0 ; else if (tmp>2359) tmp = 2359; tmp1 = tmp / 100; if (tmp1<10) str.append(QString("0")); tmp1 = tmp / 10; str.append(QString::number(tmp1)); // str.append(QString("-")); // 3 группа tmp = ui->lineEdit_4->text().toInt(); if (tmp<0) tmp =0 ; else if (tmp>9999) tmp = 9999; if (tmp<1000) str.append(QString("0")); if (tmp<100) str.append(QString("0")); if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); //4 группа // мм рт ст tmp = ui->lineEdit_5->text().toInt(); if (tmp<-99) tmp=-99; else if ( tmp>99) tmp = 99; if (tmp<0) str.append(QString("5")); else str.append(QString("0")); tmp = abs(tmp); if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // температура tmp = ui->lineEdit_6->text().toInt(); if (tmp<-49) tmp = -49; else if (tmp>49) tmp = 49; if (tmp<0) tmp = abs(tmp)+50; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); // 5,6 и последующие // QString nS[19] = {"02", "04", "08", "12", "16", "20", "24", "30", "40", "50", "60", "80", // "10", "12", "14", "18", "22", "26", "30"}; for (int i=0; i<13; i++) { // str.append(nS[i]); tmp = localLE[i*4]->text().toInt(); if (tmp<0) tmp = 0; else if (tmp>99) tmp = 99; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); tmp = localLE[i*4+1]->text().toInt(); if (tmp<-49) tmp = -49; else if (tmp>49) tmp = 49; if (tmp<0) tmp = abs(tmp)+50; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); tmp = localLE[i*4+2]->text().toInt(); if (tmp<0) tmp =0; else if (tmp>59) tmp = 59; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); tmp = localLE[i*4+3]->text().toInt(); if (tmp<0) tmp = 0; else if (tmp>99) tmp = 99; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); } for (int i=13; i<19; i++) { // str.append(nS[i]); // str.append(QString("01")); // str.append(QString("-")); tmp = localLE[i*4+1]->text().toInt(); if (tmp<-49) tmp = -49; else if (tmp>49) tmp = 49; if (tmp<0) tmp = abs(tmp)+50; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); tmp = localLE[i*4+2]->text().toInt(); if (tmp<0) tmp =0; else if (tmp>59) tmp = 59; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); tmp = localLE[i*4+3]->text().toInt(); if (tmp<0) tmp = 0; else if (tmp>99) tmp = 99; if (tmp<10) str.append(QString("0")); str.append(QString::number(tmp)); // str.append(QString("-")); } // 103 и 98 на форме стоят не по порядку, поэтому 103 нижняя высота, 98 - верхняя высота tmp = ui->lineEdit_103->text().toInt(); if (tmp<0) tmp = 0; else if (tmp>9999) tmp = 9999; tmp = tmp/100; str.append(QString::number(tmp)); tmp = ui->lineEdit_98->text().toInt(); if (tmp<0) tmp = 0; else if (tmp>9999) tmp = 9999; tmp = tmp/100; str.append(QString::number(tmp)); tmp = str.length(); ((Widget*)parent())->metSr = str; ((Widget*)parent())->writeFile(); close(); } void vvodMs::closeEvent(QCloseEvent *event) { ((Widget*)parent())->clearOpenWidget(); event->accept(); }