Changeset dfabbb4 in mmcs for mainwindow.C
- Timestamp:
- Sep 8, 2016, 12:11:37 PM (8 years ago)
- Branches:
- master
- Children:
- b23848e
- Parents:
- 0b59ba5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
mainwindow.C
r0b59ba5 rdfabbb4 14 14 #include <stackencadenamientos.h> 15 15 #include <QDebug> 16 16 17 17 18 using namespace Eigen; … … 375 376 CoeficientesTecnicos.addAction(&actionCV); 376 377 378 actionEncadenamiento.setText("Clasificar cu&entas"); 379 actionEncadenamiento.setDisabled(true); 380 CoeficientesTecnicos.addAction(&actionEncadenamiento); 381 377 382 menuTools.addMenu(&CoeficientesTecnicos); 378 383 … … 381 386 382 387 menuTools.addAction(&actionVariableExogena); 383 384 Encadenamientos.setTitle("E&ncadenamientos");385 Encadenamientos.setDisabled(true);386 387 actionEncadenamiento.setText("&Estimar Encadenamientos");388 actionEncadenamiento.setDisabled(true);389 Encadenamientos.addAction(&actionEncadenamiento);390 391 actionClasificarCuentas.setText("&Clasificar Cuentas");392 actionClasificarCuentas.setDisabled(true);393 Encadenamientos.addAction(&actionClasificarCuentas);394 395 menuTools.addMenu(&Encadenamientos);396 388 397 389 Modelos.setTitle("&Modelos"); … … 886 878 void MainWindow::abrirManual() 887 879 { 888 QDesktopServices::openUrl(QUrl("/usr/share/mmcs/Usuario/Entrada.html",QUrl::TolerantMode)); 880 //QDesktopServices::openUrl(QUrl("/usr/share/mmcs/Usuario/Entrada.html",QUrl::TolerantMode)); 881 // generate some data: 882 /*QCustomPlot *customPlot = new QCustomPlot; 883 QVector<double> x(101), y(101); // initialize with entries 0..100 884 for (int i=0; i<10; ++i) 885 { 886 x[i] = i/5.0 - 1; // x goes from -1 to 1 887 y[i] = x[i]*x[i]; // let's plot a quadratic function 888 } 889 // create graph and assign data to it: 890 customPlot->addGraph(); 891 customPlot->graph(0)->setData(x, y); 892 //customPlot->graph(0)->setLineStyle(QCPGraph::lsNone); 893 customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCross, 4)); 894 // give the axes some labels: 895 customPlot->xAxis->setLabel("-y"); 896 customPlot->yAxis->setLabel("-x"); 897 customPlot->xAxis2->setLabel("y"); 898 customPlot->yAxis2->setLabel("x"); 899 // set axes ranges, so we see all data: 900 customPlot->xAxis->setRange(-5, 5); 901 customPlot->yAxis->setRange(-5, 5); 902 customPlot->xAxis2->setRange(-5, 5); 903 customPlot->yAxis2->setRange(-5, 5); 904 customPlot->xAxis2->setVisible(true); 905 customPlot->yAxis2->setVisible(true); 906 customPlot->replot(); 907 FormExportMatrix *form = new FormExportMatrix(this); 908 QHBoxLayout *layoutHorizontal = new QHBoxLayout; 909 layoutHorizontal->addWidget(customPlot); 910 form->setLayout(layoutHorizontal); 911 form->show();*/ 889 912 } 890 913 … … 914 937 MainWindow::MainWindow() 915 938 : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this), 916 actionVariableExogena(this),actionEncadenamiento(this),action ClasificarCuentas(this), actionModeloClasico(this),939 actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this), 917 940 actionCompararResultados(this),actionModeloNoClasico(this),actionCompararResultadosMNC(this),actionPHClasicoIncidencia100(this), 918 941 actionPHCIncidenciaCuenta(this),actionPHCIncidenciaComponente(this),actionPHNoClasicoIncidencia100(this),actionPHNCIncidenciaCuenta(this), … … 2249 2272 EndogenaAn(); 2250 2273 slotMa(); 2251 Encadenamientos.setEnabled(true);2252 2274 connect(&actionEncadenamiento,SIGNAL(triggered()),this,SLOT(slotEncadenamientos())); 2253 2275 actionEncadenamiento.setEnabled(true); 2254 //Clasificador de Cuentas2255 connect(&actionClasificarCuentas,SIGNAL(triggered()),this,SLOT(slotClasificarCuentas()));2256 actionClasificarCuentas.setEnabled(true);2257 2276 2258 2277 //Se activa la opción de modelo clásico … … 2320 2339 insertremoveRowCol(to,0, false); 2321 2340 CalcularAn(tw,tablaAn,to,count,true);//Funcion para calcular el Coeficiente Tecnico Horizontal (An) 2341 //Función para calcular los totales de matriz An 2342 estimarVIFVC(); 2322 2343 /* Se colocan los titulos de cuenta endogena/exogena en la tabla endogena-exogena(Tipo de Variable)*/ 2323 2344 count=to->rowCount()-1; … … 2452 2473 else 2453 2474 { 2475 total_ma = MatrixMa.sum(); 2454 2476 QTableWidget *tablaMa = new QTableWidget; 2455 2477 tablaMa->setObjectName("MatrizMa"); … … 2920 2942 if(nombre_cuenta!="Sub-Matriz Endógena-Endógena") 2921 2943 { 2944 diccCuentasEncadenamientos.clear(); 2922 2945 if(!lw->isEnabled()) 2923 2946 { … … 3115 3138 } 3116 3139 } 3117 crearTablaVaciaEncadenamiento(elementos,enTable );3140 crearTablaVaciaEncadenamiento(elementos,enTable,7); 3118 3141 int columna=0; 3142 qDebug()<< diccCuentasEncadenamientos; 3119 3143 foreach(int key,diccCuentasEncadenamientos.keys()) 3120 3144 { … … 3145 3169 { 3146 3170 EncadenamientoAtras = An(k-2,j-2);//Suma Columna(Encadenamiento hacia atras) 3147 EncadenamientoAdelante = An( k-2,j-2);//Suma Fila(Encadenamiento hacia adelante)3171 EncadenamientoAdelante = An(j-2,k-2);//Suma Fila(Encadenamiento hacia adelante) 3148 3172 } 3149 3173 sumaColumna+=EncadenamientoAtras; … … 3164 3188 valorAdelante->setTextAlignment(Qt::AlignCenter); 3165 3189 enTable->setItem(columna,3,valorAdelante); 3190 //Se estiman los clasificadores 3191 determinarClasificador(enTable,columna,j-2,total_ma); 3166 3192 columna++; 3167 3193 } … … 3179 3205 enTable->setItem(0,2,encAtras); 3180 3206 enTable->setItem(0,3,encAdelante); 3207 //Se agregan los titulos para la clasificación de las cuentas 3208 QTableWidgetItem *indAdelante = new QTableWidgetItem("Indicador de Encadenamiento Parcial\nhacia adelante"); 3209 encadenamientosStyle(indAdelante); 3210 QTableWidgetItem *indAtras = new QTableWidgetItem("Indicador de Encadenamiento Parcial\nhacia atrás"); 3211 encadenamientosStyle(indAtras); 3212 QTableWidgetItem *clasificacion = new QTableWidgetItem("Clasificación"); 3213 encadenamientosStyle(clasificacion); 3214 enTable->setItem(0,4,indAdelante); 3215 enTable->setItem(0,5,indAtras); 3216 enTable->setItem(0,6,clasificacion); 3181 3217 noEditColZero(enTable); 3182 3218 //Se agregan las cuentas y sus componentes … … 3184 3220 //Se agregan los totales 3185 3221 calcularTotalesEncadenamientos(enTable); 3222 //Se colocan como no editables las celdas debajo de los clasificadores 3223 RowColNoEditable(enTable,4,6,enTable->rowCount()-1,true); 3186 3224 //Se auto ajustan las tablas al contenido 3187 3225 enTable->resizeRowsToContents(); … … 3195 3233 lw->setEnabled(true); 3196 3234 } 3235 } 3236 3237 /** 3238 @brief Función que permite estimar los valores del clasificador 3239 @date 08/09/2016 3240 @author Rodrigo Boet 3241 @param <fila> Recibe la variable donde se almacenará la fila 3242 @param <columna> Recibe la variable donde se almacenará la columna 3243 @param <index> Recibe la ubicación del vector de donde se extraerá el valor 3244 */ 3245 void MainWindow::estimarClasificador(double &fila, double &columna, int index, int total) 3246 { 3247 //Se buscan los botones para saber si se estimó por coeficientes técnicos o Ma 3248 QRadioButton *rbCT = findChild<QRadioButton *>("CTButton"); 3249 QRadioButton *rbMa = findChild<QRadioButton *>("MaButton"); 3250 if(rbCT->isChecked()) 3251 { 3252 double total_col = sumElements(vFila); 3253 columna = vFila.at(index)/(total_col/vFila.count()); 3254 double total_row = sumElements(vColumna); 3255 fila = vColumna.at(index)/(total_row/vColumna.count()); 3256 } 3257 else if(rbMa->isChecked()) 3258 { 3259 columna = (vFila.at(index)*vFila.count())/total; 3260 fila = (vColumna.at(index)*vColumna.count())/total; 3261 } 3262 } 3263 3264 3265 /** 3266 @brief Función que hace el trabajo de calcular y determinar los clasificadores 3267 @date 08/09/2016 3268 @author Rodrigo Boet 3269 @param <to> Recibe el widget de la tabla de encadenamientos 3270 @param <index_table> Recibe el indice de la tabla de encadenamientos 3271 @param <element> Recibe el indice de donde se extraerá el valor para calcular el clasificador 3272 */ 3273 void MainWindow::determinarClasificador(QTableWidget *tw, int index_table, int element, int total) 3274 { 3275 QString value; 3276 //Se estima la clasificación 3277 double elementColumna; 3278 double elementFila; 3279 estimarClasificador(elementFila,elementColumna,element,total); 3280 //Elementos de la clasificación columna 3281 QTableWidgetItem *clasificacionColumna = new QTableWidgetItem(QString::number(elementColumna,'f',precission)); 3282 value = Separador(clasificacionColumna,false); 3283 clasificacionColumna->setText(value); 3284 clasificacionColumna->setFlags(clasificacionColumna->flags() ^ Qt::ItemIsEditable); 3285 clasificacionColumna->setTextAlignment(Qt::AlignCenter); 3286 tw->setItem(index_table,4,clasificacionColumna); 3287 //Elementos de la clasificación fila 3288 QTableWidgetItem *clasificacionFila = new QTableWidgetItem(QString::number(elementFila,'f',precission)); 3289 value = Separador(clasificacionFila,false); 3290 clasificacionFila->setText(value); 3291 clasificacionFila->setFlags(clasificacionFila->flags() ^ Qt::ItemIsEditable); 3292 clasificacionFila->setTextAlignment(Qt::AlignCenter); 3293 tw->setItem(index_table,5,clasificacionFila); 3294 QTableWidgetItem *tipo = new QTableWidgetItem; 3295 tipo->setFlags(tipo->flags() ^ Qt::ItemIsEditable); 3296 //Se determina que tipo de cuenta es 3297 if(elementColumna<1 and elementFila<1) 3298 { 3299 tipo->setText("Independiente"); 3300 } 3301 else if(elementColumna>1 and elementFila<1) 3302 { 3303 tipo->setText("Impulsor de Economía"); 3304 } 3305 else if(elementColumna<1 and elementFila>1) 3306 { 3307 tipo->setText("Base"); 3308 } 3309 else if(elementColumna>1 and elementFila>1) 3310 { 3311 tipo->setText("Clave"); 3312 } 3313 tw->setItem(index_table,6,tipo); 3197 3314 } 3198 3315 … … 3260 3377 { 3261 3378 int countEndogena = tw->rowCount(); 3262 crearTablaVaciaEncadenamiento(countEndogena-2,enTable );3379 crearTablaVaciaEncadenamiento(countEndogena-2,enTable,7); 3263 3380 int columna=0; 3264 3381 for(int i=2;i<countEndogena;i++) … … 3287 3404 valorAdelante->setTextAlignment(Qt::AlignCenter); 3288 3405 enTable->setItem(columna,3,valorAdelante); 3406 //Se estiman los clasificadores 3407 determinarClasificador(enTable,columna,i-2,total_ma); 3289 3408 columna++; 3290 3409 } … … 3298 3417 enTable->setItem(0,3,encAdelante); 3299 3418 noEditColZero(enTable); 3419 //Se agregan los titulos para la clasificación de las cuentas 3420 QTableWidgetItem *indAdelante = new QTableWidgetItem("Indicador de Encadenamiento Parcial\nhacia adelante"); 3421 encadenamientosStyle(indAdelante); 3422 QTableWidgetItem *indAtras = new QTableWidgetItem("Indicador de Encadenamiento Parcial\nhacia atrás"); 3423 encadenamientosStyle(indAtras); 3424 QTableWidgetItem *clasificacion = new QTableWidgetItem("Clasificación"); 3425 encadenamientosStyle(clasificacion); 3426 enTable->setItem(0,4,indAdelante); 3427 enTable->setItem(0,5,indAtras); 3428 enTable->setItem(0,6,clasificacion); 3300 3429 //Se agregan las cuentas y sus componentes 3301 3430 cuentacomponentesResultado(enTable,countEndogena-1); 3302 3431 //Se agregan los totales 3303 3432 calcularTotalesEncadenamientos(enTable); 3433 //Se colocan como no editables las celdas debajo de los clasificadores 3434 RowColNoEditable(enTable,4,6,enTable->rowCount()-1,true); 3304 3435 //Se auto ajustan las tablas al contenido 3305 3436 enTable->resizeRowsToContents(); … … 3357 3488 zero->setFlags(zero->flags() ^ Qt::ItemIsEditable); 3358 3489 tw->setItem(count,0,zero); 3359 QTableWidgetItem *titulo = new QTableWidgetItem(QString("Encadenamiento Parcial %1 , Total").arg(accName.at(k)));3490 QTableWidgetItem *titulo = new QTableWidgetItem(QString("Encadenamiento Parcial %1").arg(accName.at(k))); 3360 3491 encadenamientosStyle(titulo); 3361 3492 tw->setItem(count,1,titulo); … … 3374 3505 3375 3506 /** 3376 @brief Función que permite accionar el clasificador de cuentas 3377 @date 01/09/2015 3378 @author Rodrigo Boet 3379 */ 3380 void MainWindow::slotClasificarCuentas() 3381 { 3382 QTableWidget *An = findChild<QTableWidget *>("MatrizAn"); 3383 QTableWidget *Ma = findChild<QTableWidget *>("MatrizMa"); 3384 int count = An->rowCount()-1; 3385 QTableWidget *CC = new QTableWidget; 3386 CC->setObjectName("Clasificador de Cuentas"); 3387 crearTablaVaciaEncadenamiento(count,CC,8); 3388 cuentacomponentesResultado(CC,count-1,true); 3389 QVector<double> vectorFila; 3390 QVector<double> vectorColumna; 3391 obtenerUiUj(An,vectorFila,vectorColumna); 3392 calcularClasificador(CC,vectorFila,vectorColumna); 3393 vectorFila.clear(); 3394 vectorColumna.clear(); 3395 obtenerUiUj(Ma,vectorFila,vectorColumna); 3396 calcularClasificador(CC,vectorFila,vectorColumna,5); 3397 CC->resizeColumnsToContents();//Ajuste de Columnas 3398 agregarPrimeraCelda(CC); 3399 3400 tabWidget->addTab(new QWidget,"Clasificador"); 3401 int indice=ObtenerIndice("Clasificador"); 3402 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 3403 layoutCentralWidget->addWidget(CC); 3404 QWidget *widget = tabWidget->widget(indice); 3405 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada 3406 actionClasificarCuentas.setDisabled(true); 3407 tabWidget->setCurrentIndex(indice); 3408 } 3409 3410 /** 3411 @brief Función que permite calcular los Ui y Uj para los clasificadores 3412 @date 03/09/2015 3413 @author Rodrigo Boet 3414 */ 3415 void MainWindow::obtenerUiUj(QTableWidget *tw, QVector<double> &ui, QVector<double> &uj) 3416 { 3417 int contador = tw->rowCount(); 3418 double totalFila = 0; 3419 double totalColumna = 0; 3420 QVector<double> vectorFila; 3421 QVector<double> vectorColumna; 3422 for(int i=2;i<contador;i++) 3423 { 3424 double sumaFila = 0; 3425 double sumaColumna = 0; 3426 for(int j=2;j<contador;j++) 3427 { 3428 QString itemFila = Separador(tw->item(i,j),true); 3429 QString itemColumna = Separador(tw->item(j,i),true); 3430 double fila = itemFila.toDouble(); 3431 double columna = itemColumna.toDouble(); 3432 sumaFila+=fila; 3433 sumaColumna+=columna; 3434 totalFila+=fila; 3435 totalColumna+=columna; 3436 } 3437 vectorFila.append(sumaFila); 3438 vectorColumna.append(sumaColumna); 3439 } 3440 int cantidad = vectorFila.count(); 3441 totalFila/=cantidad; 3442 totalColumna/=cantidad; 3443 for(int i=0;i<cantidad;i++) 3444 { 3445 double fila = vectorFila.at(i)/totalFila; 3446 ui.append(fila); 3447 double columna = vectorColumna.at(i)/totalColumna; 3448 uj.append(columna); 3449 } 3450 } 3451 3452 /** 3453 @brief Función que permite hacer los cálculos de los clasificadores 3454 @date 05/09/2015 3455 @author Rodrigo Boet 3456 @param <tw> Recibe el widget de la tabla 3457 @param <ui> Recibe el vector Ui 3458 @param <uj> Recibe el vector Uj 3459 @param <init> Recibe el valor guía para cuentas y componentes 3460 */ 3461 void MainWindow::calcularClasificador(QTableWidget *tw, QVector<double> ui, QVector<double> uj,int init) 3462 { 3463 int count = tw->rowCount()-1; 3464 //Fuente Negrita 3465 QFont font; 3466 font.setBold(true); 3467 //Titulos Ui, Uj y Tipo de Cuenta 3468 QTableWidgetItem *uiItem = new QTableWidgetItem("Ui"); 3469 uiItem->setFlags(uiItem->flags() ^ Qt::ItemIsEditable); 3470 uiItem->setFont(font); 3471 tw->setItem(0,init,uiItem); 3472 QTableWidgetItem *ujItem = new QTableWidgetItem("Uj"); 3473 ujItem->setFlags(ujItem->flags() ^ Qt::ItemIsEditable); 3474 ujItem->setFont(font); 3475 tw->setItem(0,init+1,ujItem); 3476 QTableWidgetItem *tcItem = new QTableWidgetItem("Tipo de Cuenta"); 3477 tcItem->setFlags(tcItem->flags() ^ Qt::ItemIsEditable); 3478 tcItem->setFont(font); 3479 tw->setItem(0,init+2,tcItem); 3507 @brief Función que calcular los vectores fila/columna usados para la clasificación de cuentas 3508 @date 07/09/2016 3509 @author Rodrigo Boet 3510 */ 3511 void MainWindow::estimarVIFVC() 3512 { 3513 int count = An.cols(); 3480 3514 for(int i=0;i<count;i++) 3481 3515 { 3482 QTableWidgetItem *vFila = new QTableWidgetItem(QString::number(ui.at(i),'f',precission)); 3483 vFila->setFlags(vFila->flags() ^ Qt::ItemIsEditable); 3484 QString itemFila = Separador(vFila,false); 3485 vFila->setText(itemFila); 3486 tw->setItem(i+1,init,vFila); 3487 QTableWidgetItem *vColumna = new QTableWidgetItem(QString::number(uj.at(i),'f',precission)); 3488 vColumna->setFlags(vColumna->flags() ^ Qt::ItemIsEditable); 3489 QString itemColumna = Separador(vColumna,false); 3490 vColumna->setText(itemColumna); 3491 tw->setItem(i+1,init+1,vColumna); 3492 QTableWidgetItem *tipo = new QTableWidgetItem; 3493 tipo->setFlags(tipo->flags() ^ Qt::ItemIsEditable); 3494 //Se determina que tipo de cuenta es 3495 if(ui.at(i)<1 and uj.at(i)<1) 3496 { 3497 tipo->setText("Independiente"); 3498 } 3499 else if(ui.at(i)>1 and uj.at(i)<1) 3500 { 3501 tipo->setText("Impulsor de Economía"); 3502 } 3503 else if(ui.at(i)<1 and uj.at(i)>1) 3504 { 3505 tipo->setText("Base"); 3506 } 3507 else if(ui.at(i)>1 and uj.at(i)>1) 3508 { 3509 tipo->setText("Clave"); 3510 } 3511 tw->setItem(i+1,init+2,tipo); 3516 double fila = 0; 3517 double columna = 0; 3518 for(int j=0;j<count;j++) 3519 { 3520 fila+= An(i,j); 3521 columna += An(j,i); 3522 } 3523 vFila.append(fila); 3524 vColumna.append(columna); 3512 3525 } 3513 3526 } … … 3581 3594 } 3582 3595 myHtml.append("</table>"); 3596 QCustomPlot *customPlot = new QCustomPlot; 3597 QVector<double> x(101), y(101); // initialize with entries 0..100 3598 for (int i=0; i<10; ++i) 3599 { 3600 x[i] = i/5.0 - 1; // x goes from -1 to 1 3601 y[i] = x[i]*x[i]; // let's plot a quadratic function 3602 } 3603 // create graph and assign data to it: 3604 customPlot->addGraph(); 3605 customPlot->graph(0)->setData(x, y); 3606 //customPlot->graph(0)->setLineStyle(QCPGraph::lsNone); 3607 customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCross, 4)); 3608 // give the axes some labels: 3609 customPlot->xAxis->setLabel("-y"); 3610 customPlot->yAxis->setLabel("-x"); 3611 customPlot->xAxis2->setLabel("y"); 3612 customPlot->yAxis2->setLabel("x"); 3613 // set axes ranges, so we see all data: 3614 customPlot->xAxis->setRange(-5, 5); 3615 customPlot->yAxis->setRange(-5, 5); 3616 customPlot->xAxis2->setRange(-5, 5); 3617 customPlot->yAxis2->setRange(-5, 5); 3618 customPlot->xAxis2->setVisible(true); 3619 customPlot->yAxis2->setVisible(true); 3620 customPlot->replot(); 3621 3583 3622 QTextDocument report; 3584 3623 report.setHtml(myHtml.join("")); 3585 QPrinter printer; 3624 QTextCursor cursor(&report); 3625 QPixmap pm = customPlot->toPixmap(); 3626 QImage img = pm.toImage(); 3627 cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); 3628 cursor.insertImage(img); 3629 QPrinter printer( QPrinter::HighResolution ); 3586 3630 printer.setOutputFileName(filename); 3587 3631 printer.setOutputFormat(QPrinter::PdfFormat); 3588 3632 report.print(&printer); 3589 printer.newPage(); 3633 3634 /*QPainter painter( &printer ); 3635 int h = painter.window().height()*0.4; 3636 int w = h * 1.3; 3637 int x1 = (painter.window().width() / 2) - (w/2); 3638 int y1 = (painter.window().height() / 2) - (h/2); 3639 painter.drawPixmap(x1, y1, w, h, customPlot->toPixmap());*/ 3640 3590 3641 } 3591 3642
Note: See TracChangeset
for help on using the changeset viewer.