Changeset b0c244f in mmcs for mainwindow.C
- Timestamp:
- Sep 28, 2016, 3:44:48 PM (8 years ago)
- Branches:
- master
- Children:
- f2dac89
- Parents:
- b23848e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
mainwindow.C
rb23848e rb0c244f 9 9 10 10 #include "mainwindow.H" 11 #include "accountwidget.H"12 #include "stackvariablesexogenas.h"13 #include "formexportmatrix.h"14 #include <stackencadenamientos.h>15 11 #include <QDebug> 16 12 … … 387 383 menuTools.addAction(&actionVariableExogena); 388 384 385 //Se agrega la acción de descomposición 386 actionDescomposicion.setText("&Descomposicion"); 387 actionDescomposicion.setDisabled(true); 388 389 menuTools.addAction(&actionDescomposicion); 390 389 391 Modelos.setTitle("&Modelos"); 390 392 Modelos.setDisabled(true); … … 797 799 vector.append(QString::number(inicio)); 798 800 vector.append(QString::number(fin)); 799 tw->setSpan(0,inicio-1,1,numberAccounts.count(item)); 800 tw->setSpan(inicio-1,0,numberAccounts.count(item),1); 801 if(numberAccounts.count(item)>1) 802 { 803 tw->setSpan(0,inicio-1,1,numberAccounts.count(item)); 804 tw->setSpan(inicio-1,0,numberAccounts.count(item),1); 805 } 801 806 } 802 807 } … … 906 911 MainWindow::MainWindow() 907 912 : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this), 908 actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this), 913 actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this), actionDescomposicion(this), 909 914 actionCompararResultados(this),actionModeloNoClasico(this),actionCompararResultadosMNC(this),actionPHClasicoIncidencia100(this), 910 915 actionPHCIncidenciaCuenta(this),actionPHCIncidenciaComponente(this),actionPHNoClasicoIncidencia100(this),actionPHNCIncidenciaCuenta(this), … … 2211 2216 2212 2217 //Se crea la nueva pestaña 2213 tabWidget->addTab(new QWidget,"Tipo de Variable"); 2214 int indice=ObtenerIndice("Tipo de Variable");//Se obtiene el indice de la pestaña 2215 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 2216 layoutCentralWidget->addWidget(tablaEE); 2217 QWidget *widget = tabWidget->widget(indice); 2218 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada 2218 createTab("Tipo de Variable",tablaEE); 2219 int indice=ObtenerIndice("Tipo de Variable"); 2219 2220 formVariablesExogenas->close(); 2220 2221 2221 2222 /* Se crea la pestaña endogena-endogena */ 2222 tabWidget->addTab(new QWidget,"Endogena-Endogena"); 2223 int indiceEndogeno=ObtenerIndice("Endogena-Endogena");//Se obtiene el indice de la pestaña 2224 QHBoxLayout * layoutEndogeno = new QHBoxLayout; 2225 layoutEndogeno->addWidget(matrizEndogena); 2226 QWidget *widgetEndogeno = tabWidget->widget(indiceEndogeno); 2227 widgetEndogeno->setLayout(layoutEndogeno);//Se añade el widget y layout a la pestaña creada 2223 createTab("Endogena-Endogena",matrizEndogena); 2228 2224 2229 2225 calcularTotalCuentas(tablaEE); … … 2243 2239 connect(&actionEncadenamiento,SIGNAL(triggered()),this,SLOT(slotEncadenamientos())); 2244 2240 actionEncadenamiento.setEnabled(true); 2241 2242 //Se activa la descomposicion 2243 connect(&actionDescomposicion,SIGNAL(triggered()),this,SLOT(slotDescomposicion())); 2244 actionDescomposicion.setEnabled(true); 2245 2245 2246 2246 //Se activa la opción de modelo clásico … … 2462 2462 titleEndogena(tablaMa); 2463 2463 spanEndogenaCell(tablaMa,2,0,false); 2464 tabWidget->addTab(new QWidget,"Ma"); 2465 int indice=ObtenerIndice("Ma");//Se obtiene el indice de la pestaña 2466 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 2467 layoutCentralWidget->addWidget(tablaMa); 2468 QWidget *widget = tabWidget->widget(indice); 2469 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada 2464 createTab("Ma",tablaMa,true); 2470 2465 2471 2466 opcionMa = 1; … … 3950 3945 sw->hide(); 3951 3946 3952 tabWidget->addTab(new QWidget,QString("Resultado C %1").arg(cantidadEscenarios)); 3953 int indice=ObtenerIndice(QString("Resultado C %1").arg(cantidadEscenarios)); 3954 3955 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 3956 layoutCentralWidget->addWidget(resultadoEscenario); 3957 QWidget *widget = tabWidget->widget(indice); 3958 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada 3959 tabWidget->setCurrentIndex(indice); 3947 createTab(QString("Resultado C %1").arg(cantidadEscenarios),resultadoEscenario,true); 3960 3948 3961 3949 cantidadEscenarios++; … … 4136 4124 ItemsNoEditable(tablaComparar,0,2); 4137 4125 4138 tabWidget->addTab(new QWidget,QString("Comparacion %1").arg(cantidadResultados)); 4139 int indice=ObtenerIndice(QString("Comparacion %1").arg(cantidadResultados)); 4140 4141 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4142 layoutCentralWidget->addWidget(tablaComparar); 4143 QWidget *widget = tabWidget->widget(indice); 4144 widget->setLayout(layoutCentralWidget); 4126 createTab(QString("Comparacion %1").arg(cantidadResultados),tablaComparar,true); 4145 4127 4146 4128 formCompararResultados->close(); 4147 tabWidget->setCurrentIndex(indice);4148 4129 cantidadResultados++; 4149 4130 } … … 4311 4292 titlespanMatrizExgEnd(Bn); 4312 4293 4313 tabWidget->addTab(new QWidget,"Bn");4294 createTab("Bn",Bn); 4314 4295 int indice=ObtenerIndice("Bn"); 4315 QHBoxLayout * layoutCentralWidget = new QHBoxLayout;4316 layoutCentralWidget->addWidget(Bn);4317 QWidget *widget = tabWidget->widget(indice);4318 widget->setLayout(layoutCentralWidget);4319 4296 tabWidget->removeTab(indice); 4320 4297 … … 4581 4558 } 4582 4559 titlespanMatrizExgEnd(Mb); 4583 tabWidget->addTab(new QWidget,"Mb"); 4584 int indice=ObtenerIndice("Mb"); 4585 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4586 layoutCentralWidget->addWidget(Mb); 4587 QWidget *widget = tabWidget->widget(indice); 4588 widget->setLayout(layoutCentralWidget); 4560 createTab("Mb",Mb); 4589 4561 } 4590 4562 … … 4625 4597 sw->hide(); 4626 4598 4627 tabWidget->addTab(new QWidget,QString("Resultado NC %1").arg(cantidadMNC)); 4628 int indice=ObtenerIndice(QString("Resultado NC %1").arg(cantidadMNC)); 4629 4630 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4631 layoutCentralWidget->addWidget(resultadoEscenario); 4632 QWidget *widget = tabWidget->widget(indice); 4633 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada 4634 tabWidget->setCurrentIndex(indice); 4599 createTab(QString("Resultado NC %1").arg(cantidadMNC),resultadoEscenario,true); 4635 4600 4636 4601 cantidadMNC++; … … 4833 4798 ItemsNoEditable(tablaComparar,0,2); 4834 4799 4835 tabWidget->addTab(new QWidget,QString("Comparacion MNC %1").arg(cantidadResultadosMNC)); 4836 int indice=ObtenerIndice(QString("Comparacion MNC %1").arg(cantidadResultadosMNC)); 4837 4838 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4839 layoutCentralWidget->addWidget(tablaComparar); 4840 QWidget *widget = tabWidget->widget(indice); 4841 widget->setLayout(layoutCentralWidget); 4800 createTab(QString("Comparacion MNC %1").arg(cantidadResultadosMNC),tablaComparar,true); 4842 4801 4843 4802 formCompararMNC->close(); 4844 tabWidget->setCurrentIndex(indice);4845 4803 cantidadResultadosMNC++; 4846 4804 } … … 4863 4821 calcularPHCIncidencia100(MatrizMi); 4864 4822 4865 tabWidget->addTab(new QWidget,"PIHc100"); 4866 int indice=ObtenerIndice("PIHc100"); 4867 4868 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4869 layoutCentralWidget->addWidget(MatrizMi); 4870 QWidget *widget = tabWidget->widget(indice); 4871 widget->setLayout(layoutCentralWidget); 4872 tabWidget->setCurrentIndex(indice); 4823 createTab("PIHc100",MatrizMi,true); 4873 4824 actionPHClasicoIncidencia100.setDisabled(true); 4874 4825 } … … 4907 4858 titleEndogena(MaT); 4908 4859 spanEndogenaCell(MaT,2,0,false); 4909 tabWidget->addTab(new QWidget,"Pc"); 4910 int indice=ObtenerIndice("Pc"); 4911 4912 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 4913 layoutCentralWidget->addWidget(MaT); 4914 QWidget *widget = tabWidget->widget(indice); 4915 widget->setLayout(layoutCentralWidget); 4860 createTab("Pc",MaT); 4916 4861 opcionMAT++; 4917 4862 } … … 5009 4954 calcularPHCIncidenciaI(MatrizIC,cantidades); 5010 4955 5011 tabWidget->addTab(new QWidget,QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta)); 5012 int indice=ObtenerIndice(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta)); 5013 5014 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5015 layoutCentralWidget->addWidget(MatrizIC); 5016 QWidget *widget = tabWidget->widget(indice); 5017 widget->setLayout(layoutCentralWidget); 5018 tabWidget->setCurrentIndex(indice); 4956 createTab(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta),MatrizIC,true); 5019 4957 cantidadPHCindidenciaiCuenta++; 5020 4958 } … … 5100 5038 calcularPHCIncidenciaIComponente(MatrizIComp,tw); 5101 5039 5102 tabWidget->addTab(new QWidget,QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente)); 5103 int indice=ObtenerIndice(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente)); 5104 5105 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5106 layoutCentralWidget->addWidget(MatrizIComp); 5107 QWidget *widget = tabWidget->widget(indice); 5108 widget->setLayout(layoutCentralWidget); 5109 tabWidget->setCurrentIndex(indice); 5040 createTab(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente),MatrizIComp,true); 5110 5041 cantidadPHCindidenciaiComponente++; 5111 5042 } … … 5207 5138 } 5208 5139 titlespanMatrizExgEnd(MbT); 5209 tabWidget->addTab(new QWidget,"Pnc"); 5210 int indice=ObtenerIndice("Pnc"); 5211 5212 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5213 layoutCentralWidget->addWidget(MbT); 5214 QWidget *widget = tabWidget->widget(indice); 5215 widget->setLayout(layoutCentralWidget); 5140 createTab("Pnc",MbT); 5216 5141 opcionMBT++; 5217 5142 } … … 5233 5158 calcularPHNCIncidencia100(MatrizMi); 5234 5159 5235 tabWidget->addTab(new QWidget,"PIHnc100"); 5236 int indice=ObtenerIndice("PIHnc100"); 5237 5238 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5239 layoutCentralWidget->addWidget(MatrizMi); 5240 QWidget *widget = tabWidget->widget(indice); 5241 widget->setLayout(layoutCentralWidget); 5242 tabWidget->setCurrentIndex(indice); 5160 createTab("PIHnc100",MatrizMi,true); 5161 5243 5162 actionPHNoClasicoIncidencia100.setDisabled(true); 5244 5163 } … … 5363 5282 calcularPHCIncidenciaI(MatrizIC,cantidades); 5364 5283 5365 tabWidget->addTab(new QWidget,QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta)); 5366 int indice=ObtenerIndice(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta)); 5367 5368 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5369 layoutCentralWidget->addWidget(MatrizIC); 5370 QWidget *widget = tabWidget->widget(indice); 5371 widget->setLayout(layoutCentralWidget); 5372 tabWidget->setCurrentIndex(indice); 5284 createTab(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta),MatrizIC,true); 5373 5285 cantidadPHNCindidenciaiCuenta++; 5374 5286 } … … 5422 5334 calcularPHCIncidenciaIComponente(MatrizIComp,tw); 5423 5335 5424 tabWidget->addTab(new QWidget,QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente)); 5425 int indice=ObtenerIndice(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente)); 5426 5427 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5428 layoutCentralWidget->addWidget(MatrizIComp); 5429 QWidget *widget = tabWidget->widget(indice); 5430 widget->setLayout(layoutCentralWidget); 5431 tabWidget->setCurrentIndex(indice); 5336 createTab(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente),MatrizIComp,true); 5432 5337 cantidadPHNCindidenciaiComponente++; 5433 5338 } … … 5618 5523 if(opcionPNHT == 0) 5619 5524 { 5620 tabWidget->addTab(new QWidget,QString("PINH100 %1").arg(cantidadPNHincidencia100)); 5621 int indice=ObtenerIndice(QString("PINH100 %1").arg(cantidadPNHincidencia100)); 5622 QHBoxLayout * layoutCentralWidget3 = new QHBoxLayout; 5623 layoutCentralWidget3->addWidget(tw); 5624 QWidget *widget3 = tabWidget->widget(indice); 5625 widget3->setLayout(layoutCentralWidget3); 5626 tabWidget->setCurrentIndex(indice); 5525 createTab(QString("PINH100 %1").arg(cantidadPNHincidencia100),tw,true); 5627 5526 cantidadPNHincidencia100++; 5628 5527 opcionPNHT = 1; … … 5781 5680 calcularPHCIncidenciaI(PNHI,cantidades); 5782 5681 5783 tabWidget->addTab(new QWidget,QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta)); 5784 int indice=ObtenerIndice(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta)); 5785 5786 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5787 layoutCentralWidget->addWidget(PNHI); 5788 QWidget *widget = tabWidget->widget(indice); 5789 widget->setLayout(layoutCentralWidget); 5790 tabWidget->setCurrentIndex(indice); 5682 createTab(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta),PNHI,true); 5791 5683 cantidadPNHincidenciaiCuenta++; 5792 5684 FI->close(); … … 5896 5788 calcularPHCIncidenciaIComponente(PNHIc,tw); 5897 5789 5898 tabWidget->addTab(new QWidget,QString("PINHic %1").arg(cantidadPNHincidenciaiComponente)); 5899 int indice=ObtenerIndice(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente)); 5900 5901 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 5902 layoutCentralWidget->addWidget(PNHIc); 5903 QWidget *widget = tabWidget->widget(indice); 5904 widget->setLayout(layoutCentralWidget); 5905 tabWidget->setCurrentIndex(indice); 5790 createTab(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente),PNHIc,true); 5906 5791 cantidadPNHincidenciaiComponente++; 5907 5792 FI->close(); … … 6098 5983 6099 5984 titleSeleccionar(nuevaTabla); 6100 tabWidget->addTab(new QWidget,QString("Seleccion %1").arg(cantidadSelecciones)); 6101 int indice=ObtenerIndice(QString("Seleccion %1").arg(cantidadSelecciones)); 6102 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 6103 layoutCentralWidget->addWidget(nuevaTabla); 6104 QWidget *widget = tabWidget->widget(indice); 6105 widget->setLayout(layoutCentralWidget); 6106 tabWidget->setCurrentIndex(indice); 5985 createTab(QString("Seleccion %1").arg(cantidadSelecciones),nuevaTabla,true); 6107 5986 cantidadSelecciones++; 6108 5987 } … … 6111 5990 } 6112 5991 5992 /** 5993 @brief Función para mostrar el formulario para la descomposicion 5994 @date 27/09/2015 5995 @author Rodrigo Boet 5996 */ 5997 void MainWindow::slotDescomposicion() 5998 { 5999 formdescomposicion = new FormDescomposicion(this); 6000 QStringList list; 6001 foreach(int key,diccCuentasEndogenas.keys()) 6002 { 6003 list.append(diccCuentasEndogenas[key][0]); 6004 } 6005 formdescomposicion->ui->listAgregar->addItems(list); 6006 connect(formdescomposicion->ui->pushButton_3,SIGNAL(clicked()),this,SLOT(slotAgregarDescomposicion())); 6007 formdescomposicion->show(); 6008 } 6009 6010 /** 6011 @brief Función para seleccionar las cuentas que seran actividad/producto 6012 @date 27/09/2015 6013 @author Rodrigo Boet 6014 */ 6015 void MainWindow::slotAgregarDescomposicion() 6016 { 6017 int item = formdescomposicion->ui->listSeleccionado->count(); 6018 if(item==2) 6019 { 6020 QStringList list; 6021 for(int i=0;i<item;i++) 6022 { 6023 list.append(formdescomposicion->ui->listSeleccionado->item(i)->text()); 6024 } 6025 if(validarDescomposicion(list)) 6026 { 6027 QTableWidget *tw = findChild<QTableWidget *>("MatrizAn"); 6028 int filas = tw->rowCount(); 6029 Eigen::MatrixXd M1 = extractSubMatriz(tw,list.at(0),list.at(0),An); 6030 Eigen::MatrixXd M2 = extractSubMatriz(tw,list.at(0),list.at(1),An); 6031 Eigen::MatrixXd M3 = extractSubMatriz(tw,list.at(1),list.at(0),An); 6032 Eigen::MatrixXd M4 = extractSubMatriz(tw,list.at(1),list.at(1),An); 6033 QVector<double> V1 = extractDiagonal(M1); 6034 QVector<double> V2 = extractDiagonal(M2); 6035 QVector<double> V3 = extractDiagonal(M3); 6036 QVector<double> V4 = extractDiagonal(M4); 6037 QVector<double> diagonal; 6038 if(validarDiagonal(V1)) 6039 { 6040 appendElements(V1,diagonal); 6041 } 6042 if(validarDiagonal(V2)) 6043 { 6044 appendElements(V2,diagonal); 6045 } 6046 if(validarDiagonal(V3)) 6047 { 6048 appendElements(V3,diagonal); 6049 } 6050 if(validarDiagonal(V4)) 6051 { 6052 appendElements(V4,diagonal); 6053 } 6054 for (int i = 2; i<filas;i++) 6055 { 6056 for(int j=2; j<filas;j++) 6057 { 6058 if(tw->item(0,j)->text()!=list.at(0) and tw->item(0,j)->text()!=list.at(1)) 6059 { 6060 if(i==j) 6061 { 6062 diagonal.append(An(i-2,j-2)); 6063 } 6064 } 6065 } 6066 } 6067 calcularA0(diagonal); 6068 calcularAuxiliares(); 6069 calcularMatricesDescomposicion(); 6070 6071 } 6072 else 6073 { 6074 QMessageBox::warning(this,"Error","La cuenta Producto y Actividad\ndeben ser simétricas, ajuste la matriz\ne intente de nuevo"); 6075 } 6076 } 6077 else 6078 { 6079 QMessageBox::warning(this,"Alerta","Debe seleccionar dos (2) cuentas"); 6080 } 6081 6082 } 6083 6084 /** 6085 @brief Función para validar que las cuentas producto y actividad sean simétricas 6086 @date 28/09/2015 6087 @author Rodrigo Boet 6088 @param <cuentas> Recibe la lista con las cuentas 6089 @return <valores> Retorna verdadera si son simétricas, falso en caso contrario 6090 */ 6091 bool MainWindow::validarDescomposicion(QStringList cuentas) 6092 { 6093 QStringList valores; 6094 foreach (int key, diccCuentasEndogenas.keys()) { 6095 if (diccCuentasEndogenas[key][0]==cuentas.at(0) or diccCuentasEndogenas[key][0]==cuentas.at(1)) 6096 { 6097 valores.append(diccCuentasEndogenas[key][1]); 6098 } 6099 } 6100 if(valores.at(0)==valores.at(1)) 6101 { 6102 return true; 6103 } 6104 else 6105 { 6106 return false; 6107 } 6108 } 6109 6110 /** 6111 @brief Función para calcular A0 6112 @date 28/09/2015 6113 @author Rodrigo Boet 6114 @param <diagonal> Recibe el valor de las diagonales 6115 */ 6116 void MainWindow::calcularA0(QVector<double> diagonal) 6117 { 6118 A0 = MatrixXd::Identity(An.rows(),An.cols()); 6119 int fila = A0.rows(); 6120 for(int i=0;i<fila;i++) 6121 { 6122 for(int j=0;j<fila;j++) 6123 { 6124 if(i==j) 6125 { 6126 A0(i,j)=diagonal.at(i); 6127 } 6128 } 6129 } 6130 QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn"); 6131 QTableWidget *tw = new QTableWidget; 6132 CrearTablaVacia(MAN->rowCount(),tw); 6133 noEditColZero(tw); 6134 clonarTabla(MAN,tw,MAN->rowCount()); 6135 fila = MAN->rowCount()-1; 6136 for(int i=2;i<fila;i++) 6137 { 6138 for(int j=2;j<fila;j++) 6139 { 6140 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(A0(i-2,j-2),'f',precission)); 6141 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6142 tw->setItem(i,j,valoraInsertar); 6143 } 6144 } 6145 createTab("A0",tw,true); 6146 formdescomposicion->close(); 6147 6148 MatrixXd ident = MatrixXd::Identity(An.rows(),An.cols()); 6149 M1 = ident - A0; 6150 M1 = M1.inverse(); 6151 QTableWidget *Mm1 = new QTableWidget; 6152 CrearTablaVacia(MAN->rowCount(),Mm1); 6153 noEditColZero(Mm1); 6154 clonarTabla(MAN,Mm1,MAN->rowCount()); 6155 fila = MAN->rowCount()-1; 6156 for(int i=2;i<fila;i++) 6157 { 6158 for(int j=2;j<fila;j++) 6159 { 6160 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M1(i-2,j-2),'f',precission)); 6161 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6162 Mm1->setItem(i,j,valoraInsertar); 6163 } 6164 } 6165 createTab("M1",Mm1); 6166 } 6167 6168 /** 6169 @brief Función para calcular los auxiliares de la descomposicion y también M2 y M3 6170 @date 28/09/2015 6171 @author Rodrigo Boet 6172 */ 6173 void MainWindow::calcularAuxiliares() 6174 { 6175 MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols()); 6176 MatrixXd aux = M1*(A0-An); 6177 M2 = ident+aux; 6178 int cantidad = diccCuentasEndogenas.count()-2; 6179 MatrixXd ant = aux; 6180 for(int i=0;i<cantidad;i++) 6181 { 6182 aux *= ant; 6183 ant = aux; 6184 if(i<cantidad-1) 6185 { 6186 M2 += aux; 6187 } 6188 } 6189 M3 = ident - aux; 6190 M3 = M3.inverse(); 6191 QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn"); 6192 QTableWidget *Mm2 = new QTableWidget; 6193 CrearTablaVacia(MAN->rowCount(),Mm2); 6194 noEditColZero(Mm2); 6195 clonarTabla(MAN,Mm2,MAN->rowCount()); 6196 int fila = MAN->rowCount()-1; 6197 for(int i=2;i<fila;i++) 6198 { 6199 for(int j=2;j<fila;j++) 6200 { 6201 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M2(i-2,j-2),'f',precission)); 6202 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6203 Mm2->setItem(i,j,valoraInsertar); 6204 } 6205 } 6206 createTab("M2",Mm2); 6207 6208 QTableWidget *Mm3 = new QTableWidget; 6209 CrearTablaVacia(MAN->rowCount(),Mm3); 6210 noEditColZero(Mm3); 6211 clonarTabla(MAN,Mm3,MAN->rowCount()); 6212 fila = MAN->rowCount()-1; 6213 for(int i=2;i<fila;i++) 6214 { 6215 for(int j=2;j<fila;j++) 6216 { 6217 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M3(i-2,j-2),'f',precission)); 6218 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6219 Mm3->setItem(i,j,valoraInsertar); 6220 } 6221 } 6222 createTab("M3",Mm3); 6223 } 6224 6225 /** 6226 @brief Función para calcular las matrices de Transferencia (T), Open(O) y Close(C) 6227 @date 28/09/2015 6228 @author Rodrigo Boet 6229 */ 6230 void MainWindow::calcularMatricesDescomposicion() 6231 { 6232 MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols()); 6233 T = M1 - ident; 6234 O = (M2 - ident) * M1; 6235 C = (M3 - ident) * (M2 * M1); 6236 6237 QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn"); 6238 QTableWidget *mt = new QTableWidget; 6239 CrearTablaVacia(MAN->rowCount(),mt); 6240 noEditColZero(mt); 6241 clonarTabla(MAN,mt,MAN->rowCount()); 6242 int fila = MAN->rowCount()-1; 6243 for(int i=2;i<fila;i++) 6244 { 6245 for(int j=2;j<fila;j++) 6246 { 6247 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(T(i-2,j-2),'f',precission)); 6248 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6249 mt->setItem(i,j,valoraInsertar); 6250 } 6251 } 6252 createTab("T",mt); 6253 6254 QTableWidget *mo = new QTableWidget; 6255 CrearTablaVacia(MAN->rowCount(),mo); 6256 noEditColZero(mo); 6257 clonarTabla(MAN,mo,MAN->rowCount()); 6258 fila = MAN->rowCount()-1; 6259 for(int i=2;i<fila;i++) 6260 { 6261 for(int j=2;j<fila;j++) 6262 { 6263 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(O(i-2,j-2),'f',precission)); 6264 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6265 mo->setItem(i,j,valoraInsertar); 6266 } 6267 } 6268 createTab("O",mo); 6269 6270 QTableWidget *mc = new QTableWidget; 6271 CrearTablaVacia(MAN->rowCount(),mc); 6272 noEditColZero(mc); 6273 clonarTabla(MAN,mc,MAN->rowCount()); 6274 fila = MAN->rowCount()-1; 6275 for(int i=2;i<fila;i++) 6276 { 6277 for(int j=2;j<fila;j++) 6278 { 6279 QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(C(i-2,j-2),'f',precission)); 6280 valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable); 6281 mc->setItem(i,j,valoraInsertar); 6282 } 6283 } 6284 createTab("C",mc); 6285 } 6286 6287 /** 6288 @brief Función para crear un nueva pestaña 6289 @date 28/09/2015 6290 @author Rodrigo Boet 6291 @param <texto> Recibe el nombre de la pestaña 6292 @param <tw> Recibe el widget de la tabla que se insertara 6293 @param <current> recibe un booleano (verdadero si se coloca como activo, falso en caso contrario) 6294 */ 6295 void MainWindow::createTab(QString texto, QTableWidget *tw, bool current) 6296 { 6297 tabWidget->addTab(new QWidget,texto); 6298 int indice=ObtenerIndice(texto); 6299 6300 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 6301 layoutCentralWidget->addWidget(tw); 6302 QWidget *widget = tabWidget->widget(indice); 6303 widget->setLayout(layoutCentralWidget); 6304 if(current) 6305 { 6306 tabWidget->setCurrentIndex(indice); 6307 } 6308 6309 } 6310
Note: See TracChangeset
for help on using the changeset viewer.