Changeset e62517a in mmcs for mainwindow.C
- Timestamp:
- Aug 31, 2016, 5:18:22 PM (8 years ago)
- Branches:
- master
- Children:
- 0b59ba5
- Parents:
- 4c71262
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
mainwindow.C
r4c71262 re62517a 11 11 #include <stackencadenamientos.h> 12 12 #include <QDebug> 13 /** 14 Sistema de Manejo de Matrices de Contabilidad Social, desarrollado a partir de Mayo de 2015. 15 @file mainwindow.c 16 @brief Cuerpo Principal de funciones del Sistema de Matrices de Contabilidad Social 17 @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres (CENDITEL) nodo Mérida - Venezuela</a> 18 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 19 */ 13 20 14 21 using namespace Eigen; … … 16 23 // FA_001 17 24 /* A partir de aquí comienzan las operaciones del menu Archivo */ 25 /** 26 @brief Función que permite desplegar el formulario de carga de matriz 27 @date 05/05/2015 28 @author José Ruiz 29 */ 18 30 void MainWindow::slotLoadMatrix() 19 31 { … … 22 34 connect(formLoadMatrix, SIGNAL(formAccepted(QString,int,int)), 23 35 this, SLOT(slotFormLoadMatrixAccepted(QString,int,int))); 24 connect(formLoadMatrix->ui.radioAccount,SIGNAL(clicked()),this,SLOT(slotOnlyaccount())); 25 connect(formLoadMatrix->ui.radioComponent,SIGNAL(clicked()),this,SLOT(slotOnlycomponent())); 26 } 27 36 connect(formLoadMatrix->ui->radioAccount,SIGNAL(clicked()),this,SLOT(slotOnlyaccount())); 37 connect(formLoadMatrix->ui->radioComponent,SIGNAL(clicked()),this,SLOT(slotOnlycomponent())); 38 } 39 40 /** 41 @brief Función que carga la matriz en el widget principal si pasó las validaciones del formulario 42 @date 05/05/2015 43 @author José Ruiz 44 @param <filePath> Recibe la ruta del directorio 45 @param <accountNumber> Recibe el número de cuentas 46 @param <pre> Recibe el valor de la cantidad de décimales 47 */ 28 48 void MainWindow::slotFormLoadMatrixAccepted(const QString & filePath, 29 49 int accountNumber, int pre) … … 37 57 } 38 58 59 /** 60 @brief Función que permite cerrar el formulario de carga de matriz 61 @date 03/04/2015 62 @author José Ruiz 63 */ 39 64 void MainWindow::slotFormLoadMatrixClosed() 40 65 { … … 44 69 } 45 70 46 /* 47 Función que permite agregar un mensaje en el label cuando se selecciona la opción de cuentas48 Autor: Rodrigo Boet49 Fecha: 29/07/201671 /** 72 @brief Función que permite agregar un mensaje en el label cuando se selecciona la opción de cuentas 73 @date 29/07/2016 74 @author Rodrigo Boet 50 75 */ 51 76 void MainWindow::slotOnlyaccount() 52 77 { 53 formLoadMatrix->ui .label_info->setText("Info: Para esta opción debe agregar debe cargar un csv con lascuentas y componentes");54 55 } 56 57 /* 58 Función que permite agregar un mensaje en el label cuando se selecciona la opción de componentes59 Autor: Rodrigo Boet60 Fecha: 29/07/201678 formLoadMatrix->ui->label_info->setText("Info: Para esta opción debe agregar debe cargar un csv con cuentas y componentes"); 79 80 } 81 82 /** 83 @brief Función que permite agregar un mensaje en el label cuando se selecciona la opción de componentes 84 @date 29/07/2016 85 @author Rodrigo Boet 61 86 */ 62 87 void MainWindow::slotOnlycomponent() 63 88 { 64 formLoadMatrix->ui.label_info->setText("Info: Para esta opción debe agregar debe cargar un csv con sólo los componentes"); 65 } 66 67 68 /* Funcion para crear un nuevo proyecto */ 89 formLoadMatrix->ui->label_info->setText("Info: Para esta opción debe agregar debe cargar un csv con sólo los componentes"); 90 } 91 92 93 /** 94 @brief Función que permite crear un nuevo proyecto 95 @date 10/11/2015 96 @author Rodrigo Boet 97 */ 69 98 void MainWindow::slotNuevoProyecto() 70 99 { … … 80 109 } 81 110 111 /** 112 @brief Función que permite crear el formulario para exportar una matriz a csv 113 @date 10/10/2015 114 @author Rodrigo Boet 115 */ 82 116 void MainWindow::slotExportMatrix() 83 117 { … … 167 201 } 168 202 203 /** 204 @brief Función que permite cerrar el formulario para exportar la matriz 205 @date 10/10/2015 206 @author Rodrigo Boet 207 */ 169 208 void MainWindow::slotCloseExport() 170 209 { … … 173 212 } 174 213 214 /** 215 @brief Función que permite exportar una matriz a csv 216 @date 10/10/2015 217 @author Rodrigo Boet 218 */ 175 219 void MainWindow::slotSaveExport() 176 220 { … … 224 268 } 225 269 270 /** 271 @brief Función que permite seleccionar la ruta en la que se guardará la matriz en csv 272 @date 10/10/2015 273 @author Rodrigo Boet 274 */ 226 275 void MainWindow::slotSearchExport() 227 276 { … … 238 287 } 239 288 289 /** 290 @brief Función que permite cargar la matriz mostrada al inicio 291 @date 10/04/2015 292 @author José Ruiz 293 */ 240 294 void MainWindow::createCentralWidget() 241 295 { … … 278 332 } 279 333 280 334 /** 335 @brief Función que permite crear el apartado <b>Archivo</b> del menú principal de la aplicación 336 @date 10/04/2015 337 @author José Ruiz 338 */ 281 339 void MainWindow::createMenuBar() 282 340 { … … 300 358 } 301 359 360 /** 361 @brief Función que permite crear el apartado <b>Herramientas</b> del menú principal de la aplicación 362 @date 10/06/2015 363 @author Rodrigo Boet 364 */ 302 365 void MainWindow::matricesMenuBar() 303 366 { … … 447 510 } 448 511 512 /** 513 @brief Función que permite cerrar todo el programa 514 @date 03/04/2015 515 @author José Ruiz 516 */ 449 517 void MainWindow::closeEvent(QCloseEvent * event) 450 518 { … … 457 525 } 458 526 527 /** 528 @brief Función que cargar crear la matriz en base al csv cargado 529 @date 10/05/2015 530 @author José Ruiz 531 Modificado por: 532 @author Rodrigo Boet 533 */ 459 534 void MainWindow::createMatrixCentralWidget() 460 535 { … … 484 559 //layoutCentralWidget->addStretch(); 485 560 486 if(formLoadMatrix->ui .radioAccount->isChecked()){561 if(formLoadMatrix->ui->radioAccount->isChecked()){ 487 562 QStringList accounts = get_list(tableWidget,0,2,tableWidget->columnCount()); 488 563 numAccounts = diferent_elements(accounts); … … 577 652 578 653 /* *********** Se agrega la columna en la que se asignan los nombre ************** */ 579 if(formLoadMatrix->ui .radioComponent->isChecked())654 if(formLoadMatrix->ui->radioComponent->isChecked()) 580 655 { 581 656 tableWidget->insertRow(0); … … 595 670 } 596 671 } 597 else if(formLoadMatrix->ui .radioAccount->isChecked()){672 else if(formLoadMatrix->ui->radioAccount->isChecked()){ 598 673 loadsAccounts(tableWidget); 599 674 } … … 616 691 } 617 692 693 /** 694 @brief Función que se encarga de cargar los datos de un csv en Widget de tabla 695 @date 15/05/2015 696 @author José Ruiz 697 Modificado por 698 @author Rodrigo Boet 699 @param <tw> Recibe el widget de la tabla 700 */ 618 701 void MainWindow::populateTable(QTableWidget * tableWidget) 619 702 { … … 627 710 CrearTablaVacia(column+2,tableWidget);//Se crea una tabla vacia a modo de matriz cuadrada 628 711 QStringList Accounts; 629 if(formLoadMatrix->ui .radioAccount->isChecked())712 if(formLoadMatrix->ui->radioAccount->isChecked()) 630 713 { 631 714 Accounts = lines; … … 681 764 } 682 765 //Se agregan las cuentas si se selecciono la opción correspondiente 683 if(formLoadMatrix->ui .radioAccount->isChecked())766 if(formLoadMatrix->ui->radioAccount->isChecked()) 684 767 { 685 768 noEditColZero(tableWidget); … … 705 788 } 706 789 707 /* 708 Función paracargar las cuentas709 Autor: Rodrigo Boet710 Fecha: 29/07/2016711 @param < QTableWidget> *tw -> Recibe como parametro una widget de tabla de qt790 /** 791 @brief Función que permite cargar las cuentas 792 @date 29/07/2016 793 @author Rodrigo Boet 794 @param <tw> Recibe el widget de la tabla 712 795 */ 713 796 void MainWindow::loadsAccounts(QTableWidget *tw) … … 762 845 } 763 846 847 /** 848 @brief Función que permite transformar un flotante en string y darle formato a los números con separador de miles 849 @date 05/05/2015 850 @author José Ruiz 851 Modificado por 852 @author Rodrigo Boet 853 @param <d> Recibe el número al que se le dará formato 854 @return <stringNumber> retorna el número con formato como un string 855 */ 764 856 QString MainWindow::numberFormat(double & d) { 765 857 … … 791 883 // FA_002 792 884 /* Aquí se encuentra el menú de ayuda */ 793 void MainWindow::abrirManual()//Funcion para abrir el manual 885 /** 886 @brief Función para abrir el manual 887 @date 20/10/2015 888 @author Rodrigo Boet 889 */ 890 void MainWindow::abrirManual() 794 891 { 795 892 QDesktopServices::openUrl(QUrl("/usr/share/mmcs/Usuario/Entrada.html",QUrl::TolerantMode)); 796 893 } 797 894 895 /** 896 @brief Función para abrir la sección acerca de 897 @date 20/10/2015 898 @author Rodrigo Boet 899 */ 798 900 void MainWindow::acercaDe()//Funcion para el mensaje acerca de 799 901 { … … 807 909 // Main_001 808 910 /* Aquí se encuentra el centro de la aplicación */ 911 /** 912 @brief Función núcleo de la aplicación 913 @date 11/04/2015 914 @author José Ruiz 915 Modificada por 916 @author Rodrigo Boet 917 */ 809 918 MainWindow::MainWindow() 810 919 : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this), … … 861 970 } 862 971 972 /** 973 @brief Función que inicializar la interfaz gráfica de la aplicación 974 @date 01/04/2015 975 @author José Ruiz 976 */ 863 977 void MainWindow::initGUI() 864 978 { … … 872 986 //Main_002 873 987 /* Aqui comienzan las funciones luego de cargar la matriz */ 874 988 /** 989 @brief Función para cambiar los iconos de habilitado/deshabilitado en el widget derecho 990 @date 10/06/2015 991 @author Rodrigo Boet 992 */ 875 993 void MainWindow::slotAccChange() 876 994 { … … 891 1009 } 892 1010 893 /* 894 Función para esconder el StackWidget que tiene los datos de las cuentas895 Autor: Rodrigo Boet896 Fecha: 29/07/20161011 /** 1012 @brief Función para esconder el StackWidget que tiene los datos de las cuentas 1013 @date 29/07/2016 1014 @author Rodrigo Boet 897 1015 */ 898 1016 void MainWindow::hideStackedWidget() … … 928 1046 } 929 1047 1048 /** 1049 @brief Función que permite agregar una cuenta siempre y cuando cumpla con la validación 1050 @date 10/06/2015 1051 @author Rodrigo Boet 1052 */ 930 1053 void MainWindow::AgregarCuenta() 931 1054 { … … 1062 1185 } 1063 1186 1187 /** 1188 @brief Función que permite finalizar las cuentas y calcular totales is se llenaron todas las cuentas 1189 @date 10/06/2015 1190 @author Rodrigo Boet 1191 */ 1064 1192 void MainWindow::FinalizarCuentas() 1065 1193 { … … 1102 1230 } 1103 1231 1104 /* 1105 Función que almacena los valores de la tabla principal en una matriz 1106 Autor: Rodrigo Boet 1107 Fecha: 21/06/2016 1108 @param <QTableWidget> *tw -> Recibe como parametro una widget de tabla de qt 1232 /** 1233 @brief Función que almacena los valores de la tabla principal en una matriz 1234 @date 21/06/2016 1235 @author Rodrigo Boet 1236 @param <tw> Recibe el widget de la tabla 1237 @param <Matriz> Recibe la matriz donde se almacenaran los resultados 1238 @param <init> Recibe el inicio de donde comenzarán las iteraciones 1109 1239 */ 1110 1240 void MainWindow::TotalPrincipalTable(QTableWidget *tw,MatrixXd &Matriz,int init) … … 1133 1263 } 1134 1264 1265 /** 1266 @brief Función que calcula los totales por fila/columna 1267 @date 12/06/2015 1268 @author Rodrigo Boet 1269 @param <tableWidget> Recibe el widget de la tabla 1270 @param <inicio> Recibe el párametro por donde iniciaran las iteraciones 1271 @param <iguales> Recibe el parametro que verifica si el total la columna i es igual al total de la columna j 1272 */ 1135 1273 void MainWindow::CalcularTotales(QTableWidget *tableWidget,int inicio,bool &iguales)//Se calculan los totales por fila/columna 1136 1274 { … … 1192 1330 } 1193 1331 1194 void MainWindow::RestaurarCeldas()//Slot que permite restaurar el titulo de las cuentas en las celdas 1332 /** 1333 @brief Función que permite restaurar el titulo de las cuentas en las celdas 1334 @date 15/06/2015 1335 @author Rodrigo Boet 1336 */ 1337 void MainWindow::RestaurarCeldas() 1195 1338 { 1196 1339 QMessageBox msBox(QMessageBox::Question,"Restaurar Celdas","¿Desea Restaurar el titulo de todas las celdas?", … … 1216 1359 } 1217 1360 1218 void MainWindow::ModificarCuenta()//Slot que permite habilitar la edicion de una cuenta una vez agregada 1361 /** 1362 @brief Función ue permite habilitar la edicion de una cuenta una vez agregada 1363 @date 16/06/2015 1364 @author Rodrigo Boet 1365 */ 1366 void MainWindow::ModificarCuenta() 1219 1367 { 1220 1368 QMessageBox msBox(QMessageBox::Question,"Modificar Cuenta","¿Desea Modificar la Cuenta Actual?", … … 1235 1383 } 1236 1384 1237 bool MainWindow::ComprobarCuentas()//Se verifica que las lineas de texto y spin box de todas las cuentas no esten vacios 1385 /** 1386 @brief Función que verifica que las lineas de texto y spin box de todas las cuentas no esten vacíos 1387 @date 18/06/2015 1388 @author Rodrigo Boet 1389 @return <centinela> retorna si se cumple o no con la condición 1390 */ 1391 bool MainWindow::ComprobarCuentas() 1238 1392 { 1239 1393 bool centinela=true; … … 1263 1417 } 1264 1418 1419 /** 1420 @brief Función que comprueba que no existan nombre de cuentas iguales 1421 @date 20/06/2015 1422 @author Rodrigo Boet 1423 @param <nombre> Recibe el nombre que se comprobará 1424 @param <indice> Recibe el indice de la cuenta que se comprueba 1425 @return <cuenta> retorna verdadero si el nombre se repite y falso en caso contrario 1426 */ 1265 1427 bool MainWindow::comprobarNombreCuenta(QString nombre,int indice) 1266 1428 { … … 1277 1439 } 1278 1440 1279 /*** Funcion que obtiene el nombre las cuentas a traves de los lineeidt y los retorna en una lista de string ***/ 1441 /** 1442 @brief Función que obtiene el nombre las cuentas a traves de los lineeidt y los retorna en una lista de string 1443 @date 10/06/2015 1444 @author Rodrigo Boet 1445 @param <contador> Recibe el número de cuentas 1446 @return <MiLista> retorna una lista de los nombres de las cuentas 1447 */ 1280 1448 QStringList MainWindow::ObtenerNombreCuenta(int contador) 1281 1449 { … … 1289 1457 } 1290 1458 1291 /*** Funcion que obtiene los inicios/fin de las cuentas y las retorna como entero en una lista 1292 si la oopcion es cero crea la lista por el inicio, de lo contrario la crea por el fin ***/ 1459 /** 1460 @brief Función que obtiene los inicios/fin de las cuentas y las retorna como entero en una lista si la opción es cero crea la lista por el inicio, de lo contrario la crea por el fin 1461 @date 01/07/2015 1462 @author Rodrigo Boet 1463 @param <contador> Recibe el limite de la iteración 1464 @param <opcion> Recibe la opción (0 para inicio de la cuenta y 1 para fin de la cuenta) 1465 @return <Lista> retorna una lista con los elementos 1466 */ 1293 1467 QList<int> MainWindow::ObtenerLimitesCuenta(int contador,int opccion) 1294 1468 { … … 1313 1487 //FG_001 1314 1488 1489 /** 1490 @brief Función que permite calcular el Coeficiente Tecnico Horizontal (An) 1491 @date 05/07/2015 1492 @author Rodrigo Boet 1493 @param <tw> Recibe el widget de la tabla 1494 @param <nuevaTabla> Recibe el widget de la tabla en la que agregaran los valores 1495 @param <tablaOriginal> Recibe el widget de la tabla original 1496 @param <count> Recibe el limite para las iteraciones 1497 @param <endogena> Recibe si se calculará el An para una tabla endogeno o no 1498 */ 1315 1499 void MainWindow::CalcularAn(QTableWidget *tw,QTableWidget *nuevaTabla,QTableWidget *tablaOriginal,int count,bool endogena)//Funcion para calcular el Coeficiente Tecnico Horizontal (An) 1316 1500 { … … 1386 1570 } 1387 1571 1388 int MainWindow::ObtenerIndice(QString text)//Funcion para obtener el indice de una pestaña buscada por un nombre dado 1572 /** 1573 @brief Función que permite obtener el indice de una pestaña buscada por un nombre dado 1574 @date 10/07/2015 1575 @author Rodrigo Boet 1576 @param <text> Recibe el nombre que se desea buscar 1577 @return <indice> retorna el número de la pestaña 1578 */ 1579 int MainWindow::ObtenerIndice(QString text) 1389 1580 { 1390 1581 int cantidad=tabWidget->count(); … … 1401 1592 } 1402 1593 1403 void MainWindow::CrearTablaVacia(int contador, QTableWidget *tw)//Funcion para crear una tabla vacia 1404 { 1405 for(int k=0;k<contador-1;k++) 1406 { 1407 tw->insertRow(k); 1408 tw->insertColumn(k); 1409 } 1410 } 1411 1412 /* Funcion para crear una tabla vacia, específicamente para los encadenamientos */ 1413 void MainWindow::crearTablaVaciaEncadenamiento(int filas, QTableWidget *tw,int columnas) 1414 { 1415 for(int j=0;j<columnas;j++) 1416 { 1417 tw->insertColumn(0); 1418 } 1419 for(int k=0;k<filas;k++) 1420 { 1421 tw->insertRow(k); 1422 } 1423 } 1424 1425 int MainWindow::contarElementosMap(QMap<QString,QStringList> diccionario)//Funcion para contar los elementos en el map o diccionario 1426 { 1427 int contador=0; 1428 foreach(QString key,diccionario.keys()) 1429 { 1430 contador+=diccionario[key].count(); 1431 } 1432 return contador; 1433 } 1434 1435 /*Funcion para agregar los componentes y cuentas a partir de la matriz endogena-endogena*/ 1594 /** 1595 @brief Función que agregar los componentes y cuentas a partir de la matriz endogena-endogena 1596 @date 10/07/2015 1597 @author Rodrigo Boet 1598 @param <tw> Recibe el widget de la tabla 1599 */ 1436 1600 void MainWindow::titleEndogena(QTableWidget *tw) 1437 1601 { … … 1477 1641 } 1478 1642 1479 /* Funcion para volver la celda(0,0) no editable */ 1480 void MainWindow::noEditColZero(QTableWidget *tw) 1481 { 1482 QTableWidgetItem *ValoraInsertar = new QTableWidgetItem; 1483 ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable); 1484 tw->setItem(0,0,ValoraInsertar); 1485 } 1486 1487 /* Funcion para colocar los titulos de las cuentas */ 1643 /** 1644 @brief Función que permite colocar los titulos de las cuentas 1645 @date 10/07/2015 1646 @author Rodrigo Boet 1647 @param <tw> Recibe el widget de la tabla 1648 */ 1488 1649 void MainWindow::setAccountTitle(QTableWidget *tw) 1489 1650 { … … 1529 1690 1530 1691 /* Funcion para agregar/quitar columnas y filas */ 1692 /** 1693 @brief Función que permite agregar/quitar columnas y filas 1694 @date 10/07/2015 1695 @author Rodrigo Boet 1696 @param <tw> Recibe el widget de la tabla 1697 @param <rowcol> Recibe el sitio donde se agregarán las columnas y filas 1698 @param <opcion> Recibe la opción (Verdadero para agregar y Falso para quitar) 1699 @return <elements> retorna una lista con los elementos 1700 */ 1531 1701 void MainWindow::insertremoveRowCol(QTableWidget *tw, int rowcol, bool opcion) 1532 1702 { … … 1545 1715 } 1546 1716 1547 /* Funcion para agregar/quitar el separador de miles y la coma en las tablas */ 1717 /** 1718 @brief Función que permite agregar/quitar el separador de miles y la coma en las tablas 1719 @date 25/09/2015 1720 @author Rodrigo Boet 1721 @param <ti> Recibe el item que se modificará 1722 @param <quitar> Recibe la un booleano (Verdadero para quitar y Falso para colocar) 1723 @return <elements> retorna el elemento con/sin separador 1724 */ 1548 1725 QString MainWindow::Separador(QTableWidgetItem *ti,bool quitar) 1549 1726 { … … 1562 1739 } 1563 1740 1741 /** 1742 @brief Función que permite clonar una tabla y todo su contenido 1743 @date 10/09/2015 1744 @author Rodrigo Boet 1745 @param <tw> Recibe el widget de la tabla de la que se copiarán los datos 1746 @param <nuevaTabla> Recibe el widget de la tabla en la que se copiarán los datos 1747 @param <cantidad> Recibe el tamaño de la tabla 1748 */ 1564 1749 void MainWindow::clonarTabla(QTableWidget *tw,QTableWidget *nuevaTabla,int cantidad) 1565 1750 { … … 1605 1790 } 1606 1791 1607 /* Funcion estandar para hacer algunas celdas no editables debido a que son dificiles de manipular(por motivos de colocado y borrado dinamico)*/ 1608 void MainWindow::ItemsNoEditable(QTableWidget *tw,int inicio,int fin,int col) 1609 { 1610 noEditColZero(tw); 1611 for(int i=inicio;i<fin;i++) 1612 { 1613 QTableWidgetItem *ValoraInsertarFila = new QTableWidgetItem; 1614 ValoraInsertarFila->setFlags(ValoraInsertarFila->flags() ^ Qt::ItemIsEditable); 1615 tw->setItem(i,col,ValoraInsertarFila); 1616 QTableWidgetItem *ValoraInsertarColumna = new QTableWidgetItem; 1617 ValoraInsertarColumna->setFlags(ValoraInsertarColumna->flags() ^ Qt::ItemIsEditable); 1618 tw->setItem(col,i,ValoraInsertarColumna); 1619 1620 } 1621 } 1622 1623 /* Funcion para agregar el estilo de una celda en negrita(letra blanca) con fondo de color azul (Cuenta) */ 1624 void MainWindow::CellStyle(QTableWidgetItem *ti) 1625 { 1626 ti->setBackgroundColor(QColor(53,140,203)); 1627 ti->setTextColor(Qt::white); 1628 QFont font; 1629 font.setBold(true); 1630 ti->setFont(font); 1631 } 1632 1633 /* Funcion para agregar el estilo de una celda con fondo de color gris (Componente) */ 1634 void MainWindow::CellStyleComponente(QTableWidgetItem *ti) 1635 { 1636 ti->setBackgroundColor(QColor(221,227,230)); 1637 } 1638 1639 /* Funcion para obtener las cuentas de la parte endogena */ 1792 /** 1793 @brief Función que permite obtener las cuentas de la parte endogena 1794 @date 10/09/2015 1795 @author Rodrigo Boet 1796 */ 1640 1797 QStringList MainWindow::obtenerCuentas() 1641 1798 { … … 1656 1813 //FH_001 1657 1814 /* Aqui empiezan las funciones de la barra herramientas*/ 1815 1816 /** 1817 @brief Función que permite calcular el coeficiente técnico vertical 1818 @date 10/05/2015 1819 @author Rodrigo Boet 1820 */ 1658 1821 void MainWindow::slotCoeficienteVertical() 1659 1822 { … … 1682 1845 } 1683 1846 1847 /** 1848 @brief Función que permite calcular el coeficiente técnico horizontal 1849 @date 11/05/2015 1850 @author Rodrigo Boet 1851 */ 1684 1852 void MainWindow::slotCoeficienteHorizontal() 1685 1853 { … … 1748 1916 1749 1917 //FH_002 1918 /** 1919 @brief Función que permite mostrar el formulario para seleccionar las cuentas exógenas 1920 @date 10/09/2015 1921 @author Rodrigo Boet 1922 */ 1750 1923 void MainWindow::slotVariableExogena() 1751 1924 { … … 1849 2022 } 1850 2023 2024 /** 2025 @brief Función que permite cerrar el formulario de selección de cuentas exógenas 2026 @date 10/07/2015 2027 @author Rodrigo Boet 2028 */ 1851 2029 void MainWindow::slotCloseExogena() 1852 2030 { … … 1854 2032 } 1855 2033 2034 2035 /** 2036 @brief Función que permite deshacer la selección de cuentas el formulario de selección de cuentas exógenas 2037 @date 14/07/2015 2038 @author Rodrigo Boet 2039 */ 1856 2040 void MainWindow::slotDeshacerExogena() 1857 2041 { … … 1875 2059 } 1876 2060 2061 /** 2062 @brief Función que permite agregar la selección de cuentas el formulario de selección de cuentas exógenas 2063 @date 18/07/2015 2064 @author Rodrigo Boet 2065 */ 1877 2066 void MainWindow::slotAgregarExogena() 1878 2067 { … … 1880 2069 QString nombre_cuenta=stackVE->comboAccount->currentText();//Se obtiene el nombre de la cuenta seleccionado 1881 2070 QListWidget *lw=new QListWidget; 1882 //lw=stackVE->veWidget->accounListWidget;1883 2071 int index=stackVE->comboAccount->currentIndex();//Se obtiene el indice selecionado 1884 2072 lw = findChild<QListWidget *>(QString("accountlist %1").arg(index + 1));//Se obtiene la lista seleccionada … … 1909 2097 } 1910 2098 2099 /** 2100 @brief Función que permite finalizar la selección de cuentas el formulario de selección de cuentas exógenas 2101 @date 20/07/2015 2102 @author Rodrigo Boet 2103 */ 1911 2104 void MainWindow::slotFinalizarExogena() 1912 2105 { … … 2112 2305 2113 2306 //FH_003 2114 /*** Slot para calcular el coeficiente tecnico vertical de la matriz endogena/exogena ***/ 2307 /** 2308 @brief Función que permite calcular el coeficiente tecnico vertical de la matriz endogena/exogena 2309 @date 05/07/2015 2310 @author Rodrigo Boet 2311 */ 2115 2312 void MainWindow::EndogenaAn() 2116 2313 { … … 2141 2338 } 2142 2339 2340 /** 2341 @brief Función que permite habilitar la función de restar la matriz indentidad menos la matriz de coeficientes técnicos 2342 @date 05/07/2015 2343 @author Rodrigo Boet 2344 */ 2143 2345 void MainWindow::slotMa() 2144 2346 { … … 2147 2349 } 2148 2350 2149 2150 /*** Funcion para retornar todos los componentes en una lista ***/ 2151 QStringList MainWindow::ObtenerComponentes(QTableWidget *tw) 2152 { 2153 QStringList MiLista; 2154 int contador=tw->rowCount(); 2155 for(int i=1;i<contador-1;i++) 2156 { 2157 MiLista.append(tw->item(0,i)->text()); 2158 } 2159 return MiLista; 2160 } 2161 2162 2163 /*** Funcion que permite llenar una lista con los elementos en un intervalo dado(fila o columna) ***/ 2164 QList<QString> MainWindow::llenarLista(QList<QString> lista,QTableWidget *tw,int valor,int opcion) 2165 { 2166 int cantidad = tw->rowCount(); 2167 for(int i=0;i<cantidad;i++) 2168 { 2169 if(opcion==1) 2170 { 2171 lista.append(tw->item(valor,i)->text()); 2172 } 2173 else 2174 { 2175 lista.append(tw->item(i,valor)->text()); 2176 } 2177 } 2178 return lista; 2179 } 2180 2181 /*** Funcion que escribe en una columna o fila con la lista dada ***/ 2182 void MainWindow::insertRowExogena(QList<QString> lista,QTableWidget *tw,int opcion) 2183 { 2184 for(int i=0;i<tw->rowCount();i++) 2185 { 2186 QTableWidgetItem *twi =new QTableWidgetItem; 2187 twi->setText(lista[i]); 2188 twi->setFlags(twi->flags() ^ Qt::ItemIsEditable); 2189 int fin=tw->rowCount(); 2190 if(opcion==1) 2191 { 2192 tw->setItem(fin-1,i,twi); 2193 } 2194 else 2195 { 2196 tw->setItem(i,fin-1,twi); 2197 } 2198 } 2199 } 2200 2201 /*** Funcion que permite insertar, alinear y combinar las celdas con los titulos endogena/exogena ***/ 2351 /** 2352 @brief Función que permite insertar, alinear y combinar las celdas con los titulos endogena/exogena 2353 @date 07/07/2015 2354 @author Rodrigo Boet 2355 @param <tw> Recibe el widget de la Tabla 2356 @param <inicioExogena> Recibe el inicio de las wxógenas 2357 @param <inicioExogena> Recibe la cantidad de elementos 2358 @param <condicion> Recibe la condicion (Verdadero si tiene cuentas endgenas y Falso en caso contrario) 2359 */ 2202 2360 void MainWindow::setEndogenaExogenaCell(QTableWidget *tw,int inicioExogena,int elementos,bool condicion) 2203 2361 { … … 2270 2428 } 2271 2429 2272 /* Funcion que determina los Multiplicadores de Leontief */ 2430 /** 2431 @brief Función que permite determinar los Multiplicadores de Leontief 2432 @date 08/07/2015 2433 @author Rodrigo Boet 2434 @param <tw> Recibe el widget de la tabla 2435 */ 2273 2436 void MainWindow::restarIdentidadAn(QTableWidget *tw) 2274 2437 { … … 2323 2486 } 2324 2487 2325 /* Funcion que crea un diccionario con cuenta/cantidad de veces que se repiten para el espacio de las celdas */ 2488 /** 2489 @brief Función que permite crear un diccionario con cuenta/cantidad de veces que se repiten para el espacio de las celdas 2490 @date 10/07/2015 2491 @author Rodrigo Boet 2492 @param <tw> Recibe el widget de la tabla 2493 @param <endogena> Recibe un booleando (Verdadero si es endogena, Falso de lo contrario) 2494 */ 2326 2495 void MainWindow::crearDiccionario(QTableWidget *tw, bool endogena) 2327 2496 { … … 2367 2536 } 2368 2537 2369 /* Crea una lista de las cuentas endogenas s*/ 2538 /** 2539 @brief Función que permite crear una lista de las cuentas endógenas 2540 @date 10/07/2015 2541 @author Rodrigo Boet 2542 @param <tw> Recibe el widget de la tabla 2543 @param <list> Recibe la lista en la que se agregan los elementos 2544 @return <list> retorna la lista con los elementos 2545 */ 2370 2546 QStringList MainWindow::obtenerCuentasEndogenas(QTableWidget *tw,QStringList list) 2371 2547 { … … 2381 2557 } 2382 2558 2383 /* Crea una lista de las cuentas exogenas */ 2559 /** 2560 @brief Función que permite crear una lista de las cuentas exógenas 2561 @date 10/07/2015 2562 @author Rodrigo Boet 2563 @param <tw> Recibe el widget de la tabla 2564 @param <list> Recibe la lista en la que se agregan los elementos 2565 @return <list> retorna la lista con los elementos 2566 */ 2384 2567 QStringList MainWindow::obtenerCuentasExogenas(QTableWidget *tw,QStringList list) 2385 2568 { … … 2396 2579 } 2397 2580 2398 /* Permite crear los espacios en las celdas de las cuentas en la matriz endogena */ 2581 /** 2582 @brief Función que permite crear los espacios en las celdas de las cuentas en la matriz endogena 2583 @date 15/07/2015 2584 @author Rodrigo Boet 2585 @param <tw> Recibe el widget de la tabla 2586 @param <inicio> Recibe el inicio de la tabla 2587 @param <celda> Recibe el número de la celda 2588 @param <endex> Recibe un booleano (Verdadero si la matriz es endógena/exógena, Falso en caso contrario) 2589 */ 2399 2590 void MainWindow::spanEndogenaCell(QTableWidget *tw,int inicio,int celda,bool endex) 2400 2591 { … … 2436 2627 } 2437 2628 2629 /** 2630 @brief Función que permite crear los espacios en las celdas de las cuentas en la matriz exógena 2631 @date 11/07/2015 2632 @author Rodrigo Boet 2633 @param <tw> Recibe el widget de la tabla 2634 @param <contador> Recibe el limite de la iteración 2635 */ 2438 2636 void MainWindow::spanExogenaCell(QTableWidget *tw,int celda) 2439 2637 { … … 2468 2666 } 2469 2667 2470 /* obtiene un diccionario de cuentas/componentes de la matriz endogena/endogena */ 2668 /** 2669 @brief Función que permite obtener un diccionario de cuentas/componentes de la matriz endógena/endógena 2670 @date 20/07/2015 2671 @author Rodrigo Boet 2672 */ 2471 2673 void MainWindow::obtenerCuentaComponentes() 2472 2674 { … … 2505 2707 } 2506 2708 2507 /* Funcion para agregar el estilo de una celda en negrita(letras blancas) con fondo de color gris oscuro (endogéna-exogéna) */ 2508 void MainWindow::CellStyleExEn(QTableWidgetItem *ti) 2509 { 2510 ti->setBackgroundColor(QColor(110,110,110)); 2511 ti->setTextColor(Qt::white); 2512 QFont font; 2513 font.setBold(true); 2514 ti->setFont(font); 2515 } 2516 2517 /* Funcion que determina los totales de la matriz end-end y end-exog */ 2709 2710 /** 2711 @brief Función que permite determinar los totales de la matriz end-end y end-exog 2712 @author Rodrigo Boet 2713 @param <tw> Recibe el widget de la tabla 2714 @param <inicio> Recibe el inicio de la tabla 2715 @param <fin> Recibe el fin de la tabla 2716 @param <exogena> Recibe el comienzo de las cuentas exógenas 2717 */ 2518 2718 void MainWindow::calcularSubtotal(QTableWidget *tw, int inicio, int fin,int exogena) 2519 2719 { … … 2539 2739 } 2540 2740 2541 void MainWindow::tableItem(QTableWidget *tw, int inicio, int fin, QString texto) 2542 { 2543 for(int i=inicio;i<fin;i++) 2544 { 2545 QTableWidgetItem *itemFila = new QTableWidgetItem(texto); 2546 itemFila->setFlags(itemFila->flags() ^ Qt::ItemIsEditable); 2547 QTableWidgetItem *itemColumna = new QTableWidgetItem(texto); 2548 itemColumna->setFlags(itemColumna->flags() ^ Qt::ItemIsEditable); 2549 tw->setItem(0,i,itemFila); 2550 tw->setItem(i,0,itemColumna); 2551 } 2552 } 2553 2554 /* Funcion que crea un vector con el total de las cuentas */ 2741 /** 2742 @brief Función que permite crear un vector con el total de las cuentas 2743 @date 25/07/2015 2744 @author Rodrigo Boet 2745 @param <tw> Recibe el widget de la tabla 2746 */ 2555 2747 void MainWindow::calcularTotalCuentas(QTableWidget *tw) 2556 2748 { … … 2572 2764 } 2573 2765 2574 /* Funcion que calcula el vector ponderacion */ 2766 /** 2767 @brief Función que permite calcular el vector ponderación 2768 @date 10/08/2015 2769 @author Rodrigo Boet 2770 */ 2575 2771 void MainWindow::estimarVectorPonderacion() 2576 2772 { … … 2591 2787 2592 2788 //FH_004 2593 /* Funcion para crear la ventana de los encadenamientos */ 2789 /** 2790 @brief Función que permite crear la ventana de los encadenamientos 2791 @date 01/08/2015 2792 @author Rodrigo Boet 2793 */ 2594 2794 void MainWindow::slotEncadenamientos() 2595 2795 { … … 2699 2899 } 2700 2900 2901 /** 2902 @brief Función que permite cerrar la ventana de los encadenamientos 2903 @date 01/08/2015 2904 @author Rodrigo Boet 2905 */ 2701 2906 void MainWindow::slotCloseEncadenamiento() 2702 2907 { … … 2704 2909 } 2705 2910 2706 2911 /** 2912 @brief Función que permite agregar elementos en la ventana de los encadenamientos 2913 @date 01/08/2015 2914 @author Rodrigo Boet 2915 */ 2707 2916 void MainWindow::slotAgregarEncadenamiento() 2708 2917 { … … 2754 2963 } 2755 2964 2965 /** 2966 @brief Función que permite ver los encadenamientos 2967 @date 01/08/2015 2968 @author Rodrigo Boet 2969 */ 2756 2970 void MainWindow::slotVerEncadenamiento() 2757 2971 { … … 2787 3001 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 2788 3002 layoutCentralWidget->addWidget(enTable); 3003 //Se genera el panel lateral para los botones 3004 QVBoxLayout * layoutLateralWidget = new QVBoxLayout; 3005 //Se genera el boton de reporte 3006 QPushButton * buttonReport = new QPushButton; 3007 buttonReport->setText("&Reporte"); 3008 buttonReport->setObjectName("ReportButton"); 3009 buttonReport->setFixedWidth(100); 3010 buttonReport->setStyleSheet("background-color: #358ccb; color: #fff;" 3011 "font-weight: bold; height: 30px; border: none;" 3012 "border-radius: 5px; margin-top: 40px;"); 3013 3014 //Se genera la caja de grupo que contendrá el botón 3015 QGroupBox * groupBoxAccount = new QGroupBox; 3016 groupBoxAccount->setFixedWidth(220); 3017 groupBoxAccount->setTitle("Operaciones"); 3018 groupBoxAccount->setStyleSheet("QGroupBox {border: 1px solid gray; " 3019 "border-radius: 3px; margin-top: 0.5em;} " 3020 "QGroupBox::title { subcontrol-origin: margin; " 3021 "left: 10px; padding: 0 3px 0 3px; } "); 3022 3023 QHBoxLayout * layoutButtons = new QHBoxLayout; 3024 layoutButtons->addWidget(buttonReport); 3025 groupBoxAccount->setLayout(layoutButtons); 3026 //Se conecta el boton de reporte 3027 connect(buttonReport,SIGNAL(clicked()),this,SLOT(slotEncadenamientoReport())); 3028 3029 layoutLateralWidget->addWidget(groupBoxAccount); 3030 layoutCentralWidget->addLayout(layoutLateralWidget); 3031 2789 3032 QWidget *widget = tabWidget->widget(indice); 2790 3033 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada … … 2812 3055 QHBoxLayout * layoutCentralWidget = new QHBoxLayout; 2813 3056 layoutCentralWidget->addWidget(enTable); 3057 //Se genera el panel lateral para los botones 3058 QVBoxLayout * layoutLateralWidget = new QVBoxLayout; 3059 //Se genera el boton de reporte 3060 QPushButton * buttonReport = new QPushButton; 3061 buttonReport->setText("&Reporte"); 3062 buttonReport->setObjectName("ReportButton"); 3063 buttonReport->setFixedWidth(100); 3064 buttonReport->setStyleSheet("background-color: #358ccb; color: #fff;" 3065 "font-weight: bold; height: 30px; border: none;" 3066 "border-radius: 5px; margin-top: 40px;"); 3067 3068 //Se genera la caja de grupo que contendrá el botón 3069 QGroupBox * groupBoxAccount = new QGroupBox; 3070 groupBoxAccount->setFixedWidth(220); 3071 groupBoxAccount->setTitle("Operaciones"); 3072 groupBoxAccount->setStyleSheet("QGroupBox {border: 1px solid gray; " 3073 "border-radius: 3px; margin-top: 0.5em;} " 3074 "QGroupBox::title { subcontrol-origin: margin; " 3075 "left: 10px; padding: 0 3px 0 3px; } "); 3076 3077 QHBoxLayout * layoutButtons = new QHBoxLayout; 3078 layoutButtons->addWidget(buttonReport); 3079 groupBoxAccount->setLayout(layoutButtons); 3080 //Se conecta el boton de reporte 3081 connect(buttonReport,SIGNAL(clicked()),this,SLOT(slotEncadenamientoReport())); 3082 3083 layoutLateralWidget->addWidget(groupBoxAccount); 3084 layoutCentralWidget->addLayout(layoutLateralWidget); 3085 2814 3086 QWidget *widget = tabWidget->widget(indice); 2815 3087 widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada … … 2828 3100 } 2829 3101 2830 /* Funcion para crear la tabla con los encadenamientos */ 3102 /** 3103 @brief Función que permite crear la tabla con los encadenamientos 3104 @date 18/08/2015 3105 @author Rodrigo Boet 3106 @param <tw> Recibe el widget de la tabla 3107 @param <enTable> Recibe el widget de la tabla donde se colocarán los encadenamientos 3108 */ 2831 3109 void MainWindow::crearMatrizEncadenamiento(QTableWidget *tw,QTableWidget *enTable) 2832 3110 { … … 2900 3178 enTable->insertRow(0); 2901 3179 QTableWidgetItem *encAtras = new QTableWidgetItem("Encadenamiento Parcial\nhacia atrás"); 2902 encade mientosStyle(encAtras);3180 encadenamientosStyle(encAtras); 2903 3181 QTableWidgetItem *encAdelante = new QTableWidgetItem("Encadenamiento Parcial\nhacia adelante"); 2904 encade mientosStyle(encAdelante);3182 encadenamientosStyle(encAdelante); 2905 3183 enTable->setItem(0,2,encAtras); 2906 3184 enTable->setItem(0,3,encAdelante); … … 2923 3201 } 2924 3202 3203 /** 3204 @brief Función que permite agregar las cuentas y componentes en la tabla de encadenamientos 3205 @date 19/08/2015 3206 @author Rodrigo Boet 3207 @param <to> Recibe el widget de la tabla de encadenamientos 3208 @param <count> Recibe el limite de la tabla 3209 */ 2925 3210 void MainWindow::cuentacomponentesEncadenamiento(QTableWidget *to,int count) 2926 3211 { … … 2968 3253 } 2969 3254 2970 /* Funcion para crear los encadenamientos de toda la matrix endógena-endógena */ 3255 /** 3256 @brief Función que crear los encadenamientos de toda la matrix endógena-endógena 3257 @date 28/08/2015 3258 @author Rodrigo Boet 3259 @param <tw> Recibe el widget de la tabla 3260 @param <enTable> Recibe el widget de la tabla de los encadenamientos 3261 @param <Matrix> Recibe la matriz de donde se sacarán los valores númericos 3262 */ 2971 3263 void MainWindow::crearMatrizEncadenamientoEndogena(QTableWidget *tw,QTableWidget *enTable, Eigen::MatrixXd Matrix) 2972 3264 { … … 3004 3296 enTable->insertRow(0); 3005 3297 QTableWidgetItem *encAtras = new QTableWidgetItem("Encadenamiento Parcial\nhacia atrás"); 3006 encade mientosStyle(encAtras);3298 encadenamientosStyle(encAtras); 3007 3299 QTableWidgetItem *encAdelante = new QTableWidgetItem("Encadenamiento Parcial\nhacia adelante"); 3008 encade mientosStyle(encAdelante);3300 encadenamientosStyle(encAdelante); 3009 3301 enTable->setItem(0,2,encAtras); 3010 3302 enTable->setItem(0,3,encAdelante); … … 3026 3318 } 3027 3319 3028 /* Funcion para agregar los estilos de la tabla de encadenamientos */ 3029 void MainWindow::encademientosStyle(QTableWidgetItem *ti) 3030 { 3031 QFont font; 3032 font.setBold(true); 3033 ti->setFont(font); 3034 ti->setFlags(ti->flags() ^ Qt::ItemIsEditable); 3035 ti->setTextAlignment(Qt::AlignCenter); 3036 } 3037 3038 /* Funcion para agregar los totales en la matriz de encadenamientos */ 3320 /** 3321 @brief Función que permite agregar y calcular los totales en la matriz de encadenamientos 3322 @date 28/08/2015 3323 @author Rodrigo Boet 3324 @param <tw> Recibe el widget de la tabla 3325 */ 3039 3326 void MainWindow::calcularTotalesEncadenamientos(QTableWidget *tw) 3040 3327 { … … 3075 3362 tw->setItem(count,0,zero); 3076 3363 QTableWidgetItem *titulo = new QTableWidgetItem(QString("Encadenamiento Parcial %1, Total").arg(accName.at(k))); 3077 encade mientosStyle(titulo);3364 encadenamientosStyle(titulo); 3078 3365 tw->setItem(count,1,titulo); 3079 3366 QTableWidgetItem *totalAtras = new QTableWidgetItem(QString::number(sumaAtras,'f',precission)); 3080 3367 QString value = Separador(totalAtras,false); 3081 3368 totalAtras->setText(value); 3082 encade mientosStyle(totalAtras);3369 encadenamientosStyle(totalAtras); 3083 3370 QTableWidgetItem *totalAdelante = new QTableWidgetItem(QString::number(sumaAdelante,'f',precission)); 3084 3371 value = Separador(totalAdelante,false); 3085 3372 totalAdelante->setText(value); 3086 encade mientosStyle(totalAdelante);3373 encadenamientosStyle(totalAdelante); 3087 3374 tw->setItem(count,2,totalAtras); 3088 3375 tw->setItem(count,3,totalAdelante); … … 3090 3377 } 3091 3378 3092 //Clasificador de cuentas 3379 /** 3380 @brief Función que permite accionar el clasificador de cuentas 3381 @date 01/09/2015 3382 @author Rodrigo Boet 3383 */ 3093 3384 void MainWindow::slotClasificarCuentas() 3094 3385 { … … 3121 3412 } 3122 3413 3123 /* Funcion que calcular los Ui y Uj para los clasificadores */ 3414 /** 3415 @brief Función que permite calcular los Ui y Uj para los clasificadores 3416 @date 03/09/2015 3417 @author Rodrigo Boet 3418 */ 3124 3419 void MainWindow::obtenerUiUj(QTableWidget *tw, QVector<double> &ui, QVector<double> &uj) 3125 3420 { … … 3159 3454 } 3160 3455 3161 /* Funcion que hace los cálculos de los clasificadores */ 3456 /** 3457 @brief Función que permite hacer los cálculos de los clasificadores 3458 @date 05/09/2015 3459 @author Rodrigo Boet 3460 @param <tw> Recibe el widget de la tabla 3461 @param <ui> Recibe el vector Ui 3462 @param <uj> Recibe el vector Uj 3463 @param <init> Recibe el valor guía para cuentas y componentes 3464 */ 3162 3465 void MainWindow::calcularClasificador(QTableWidget *tw, QVector<double> ui, QVector<double> uj,int init) 3163 3466 { … … 3214 3517 } 3215 3518 3519 /** 3520 @brief Función que permite agregar la primera celda en los clasificadores 3521 @date 10/09/2015 3522 @author Rodrigo Boet 3523 @param <tw> Recibe el widget de la tabla de clasificadores 3524 */ 3216 3525 void MainWindow::agregarPrimeraCelda(QTableWidget *tw) 3217 3526 { … … 3239 3548 } 3240 3549 3550 /** 3551 @brief Función que permite abir el formulario de creación del reporte de los encadenamientos 3552 @date 31/08/2015 3553 @author Rodrigo Boet 3554 */ 3555 void MainWindow::slotEncadenamientoReport() 3556 { 3557 FormExportReport *formularioReporte = new FormExportReport(this); 3558 connect(formularioReporte,SIGNAL(formAccepted(QString)),this,SLOT(slotGenerarEncadenamientoReport(QString))); 3559 formularioReporte->show(); 3560 } 3561 3562 /** 3563 @brief Función que crear el reporte de los encadenamientos 3564 @date 31/08/2015 3565 @author Rodrigo Boet 3566 */ 3567 void MainWindow::slotGenerarEncadenamientoReport(QString filename) 3568 { 3569 int indice = tabWidget->currentIndex(); 3570 QWidget *widget = tabWidget->widget(indice); 3571 QTableWidget *tw = widget->findChild<QTableWidget *>(); 3572 int row = tw->rowCount(); 3573 int col = tw->columnCount(); 3574 QStringList myHtml; 3575 myHtml.append("<table>"); 3576 for(int i=0;i<row;i++) 3577 { 3578 myHtml.append("<tr>"); 3579 for(int j=0;j<col;j++) 3580 { 3581 QString item = tw->item(i,j)->text(); 3582 myHtml.append("<td>"+item+"</td>"); 3583 } 3584 myHtml.append("</tr>"); 3585 } 3586 myHtml.append("</table>"); 3587 QTextDocument report; 3588 report.setHtml(myHtml.join("")); 3589 QPrinter printer; 3590 printer.setOutputFileName(filename); 3591 printer.setOutputFormat(QPrinter::PdfFormat); 3592 report.print(&printer); 3593 printer.newPage(); 3594 } 3595 3596 3241 3597 //FH_005 3598 /** 3599 @brief Función que ejecuta la acción del botón de modelo clásico 3600 @date 15/09/2015 3601 @author Rodrigo Boet 3602 */ 3242 3603 void MainWindow::slotModeloClasico() 3243 3604 { … … 3297 3658 3298 3659 } 3299 /* Funcion que realiza las operaciones en el escenario */ 3660 3661 3662 /** 3663 @brief Función que permite realizar las operaciones en el escenario 3664 @date 15/09/2015 3665 @author Rodrigo Boet 3666 @param <tw> Recibe el widget de la tabla 3667 @param <clasico> Recibe un booleano (Verdadero si para el modelo clásico, Falso en caso contrario) 3668 */ 3300 3669 void MainWindow::llenarEscenario(QTableWidget *tw,bool clasico) 3301 3670 { … … 3361 3730 } 3362 3731 3732 /** 3733 @brief Función que permite calcular un escenario 3734 @date 18/09/2015 3735 @author Rodrigo Boet 3736 @param <tw> Recibe el widget de la tabla 3737 @param <clasico> Recibe un booleano (Verdadero si para el modelo clásico, Falso en caso contrario) 3738 */ 3363 3739 void MainWindow::calcularEscenario(bool clasico) 3364 3740 { … … 3423 3799 } 3424 3800 3801 /** 3802 @brief Función que permite finalizar un escenario 3803 @date 18/09/2015 3804 @author Rodrigo Boet 3805 */ 3425 3806 void MainWindow::finalizarEscenario() 3426 3807 { … … 3463 3844 } 3464 3845 3846 /** 3847 @brief Función que permite realizar el cálculo al finalizar un escenario 3848 @date 18/09/2015 3849 @author Rodrigo Boet 3850 */ 3465 3851 void MainWindow::calcularFinEscenario(QTableWidget *tw) 3466 3852 { … … 3511 3897 } 3512 3898 3513 /* funcion que calcula el resultado de multiplicar Ma por el subtotal del escenario y lo retorna en un vector */ 3899 /** 3900 @brief Función que calcular el resultado de multiplicar Ma por el subtotal del escenario y lo retorna en un vector 3901 @date 25/09/2015 3902 @author Rodrigo Boet 3903 @param <res> Recibe el vector donde se almacenarán los resultados 3904 @return <res> retorna el vector con los elementos 3905 */ 3514 3906 QVector<double> MainWindow::obtenerResultadoEscenario(QVector<double> res) 3515 3907 { … … 3532 3924 } 3533 3925 3926 /** 3927 @brief Función que permite abrir el formulario de comparación de resultados 3928 @date 01/10/2015 3929 @author Rodrigo Boet 3930 */ 3534 3931 void MainWindow::slotCompararResultados() 3535 3932 { … … 3551 3948 } 3552 3949 3950 /** 3951 @brief Función que permite obtener los nombres de los resultados de un escenario 3952 @date 02/10/2015 3953 @author Rodrigo Boet 3954 @return <nombres> retorna los nombres de los resultados del escenario 3955 */ 3553 3956 QStringList MainWindow::obtenerNombreResultadoEscenario() 3554 3957 { … … 3562 3965 } 3563 3966 3967 /** 3968 @brief Función que permite generar el resultado de la comparación de los escenarios 3969 @date 05/10/2015 3970 @author Rodrigo Boet 3971 */ 3564 3972 void MainWindow::slotVerResultado() 3565 3973 { … … 3616 4024 } 3617 4025 3618 void MainWindow::crearTablaComparar(QTableWidget *to, QTableWidget *tw) 3619 { 3620 int count = to->rowCount(); 3621 int col = to->columnCount(); 3622 to->insertColumn(col); 3623 to->insertColumn(col); 3624 for(int i=0;i<count;i++) 3625 { 3626 QTableWidgetItem *item1 = new QTableWidgetItem(tw->item(i,2)->text()); 3627 item1->setTextAlignment(Qt::AlignCenter); 3628 item1->setFlags(item1->flags() ^ Qt::ItemIsEditable); 3629 QTableWidgetItem *item2 = new QTableWidgetItem(tw->item(i,3)->text()); 3630 item2->setTextAlignment(Qt::AlignCenter); 3631 item2->setFlags(item2->flags() ^ Qt::ItemIsEditable); 3632 if(i==0) 3633 { 3634 QFont font; 3635 font.setBold(true); 3636 item1->setFont(font); 3637 item2->setFont(font); 3638 } 3639 to->setItem(i,col,item1); 3640 to->setItem(i,col+1,item2); 3641 } 3642 to->resizeColumnsToContents(); 3643 to->resizeRowsToContents(); 3644 } 3645 3646 /* Funcion para colocar cuenta/componentes en las tablas de modelo clasico, resultados y comparar resultados*/ 4026 /** 4027 @brief Función que permite colocar cuenta/componentes en las tablas de modelo clasico, resultados y comparar resultados 4028 @date 08/10/2015 4029 @author Rodrigo Boet 4030 @param <to> Recibe el widget de la tabla 4031 @param <count> Recibe el limite de la tabla 4032 @param <clasico> Recibe un booleano (Verdadero si es para el módelo clásico, Falso en caso contrario) 4033 */ 3647 4034 void MainWindow::cuentacomponentesResultado(QTableWidget *to, int count,bool clasico) 3648 4035 { … … 3695 4082 3696 4083 //FH_006 4084 /** 4085 @brief Función que permite ejecutar la acción del botón del modelo no clásico 4086 @date 10/10/2015 4087 @author Rodrigo Boet 4088 */ 3697 4089 void MainWindow::slotModeloNoClasico() 3698 4090 { … … 3705 4097 } 3706 4098 4099 /** 4100 @brief Función que permite obtener las Matriz Exógena/Endógena 4101 @date 12/10/2015 4102 @author Rodrigo Boet 4103 */ 3707 4104 void MainWindow::obtenerMatrizExgEnd() 3708 4105 { … … 3763 4160 } 3764 4161 4162 /** 4163 @brief Función que permite calcular los multiplicadores de Leontief en la matriz Exógena/Endógena 4164 @date 14/10/2015 4165 @author Rodrigo Boet 4166 */ 3765 4167 void MainWindow::calcularMb() 3766 4168 { … … 3796 4198 opcionMb++; 3797 4199 } 3798 /* Funcion para crear la Matriz Exógena Endógena*/ 4200 4201 /** 4202 @brief Función que permite crear la Matriz Exógena Endógena 4203 @date 10/10/2015 4204 @author Rodrigo Boet 4205 */ 3799 4206 void MainWindow::crearMatrizExgEnd(QTableWidget *MatrizEndogenaExogena,QTableWidget *MatrizExgEnd,int elementos,int inicioExogena) 3800 4207 { … … 3822 4229 } 3823 4230 3824 /* 3825 Función que almacena los valores del fragmento exogeno/endogeno la tabla Tipo de variables3826 Autor: Rodrigo Boet3827 Fecha: 22/06/20163828 @param < int> elementos -> Recibe como párametro la cantidad de elemntos que tiene esa sección3829 @param < int> cantidad -> Recibe como parametro el inicio de del fragmento exogeno/endogeno4231 /** 4232 @brief Función que almacena los valores del fragmento exogeno/endogeno la tabla Tipo de variables 4233 @date 22/06/2016 4234 @author Rodrigo Boet 4235 @param <elementos> Recibe como párametro la cantidad de elemntos que tiene esa sección 4236 @param <cantidad> Recibe como parametro el inicio de del fragmento exogeno/endogeno 3830 4237 */ 3831 4238 void MainWindow::TotalEndoExoTable(int elementos, int cantidad) … … 3842 4249 } 3843 4250 3844 /* Funcion para calcular los totales de la matriz Exógena-Endógena */ 4251 /** 4252 @brief Función que permite calcular los totales de la matriz Exógena-Endógena 4253 @date 22/06/2016 4254 @author Rodrigo Boet 4255 @param <MatrizExgEnd> Recibe como párametro el widget de la matriz Exógena-Endógena 4256 */ 3845 4257 void MainWindow::calcularMatrizExgEnd(QTableWidget *MatrizExgEnd) 3846 4258 { … … 3866 4278 } 3867 4279 4280 /** 4281 @brief Función que permite calcular los coeficientes técnicos verticales de la matriz Exógena-Endógena 4282 @date 18/10/2015 4283 @author Rodrigo Boet 4284 @param <MatrizExgEnd> Recibe como párametro el widget de la matriz Exógena-Endógena 4285 @param <Bn> Recibe como párametro el widget de la matriz Bn 4286 */ 3868 4287 void MainWindow::ctvMatrizExgEnd(QTableWidget *MatrizExgEnd,QTableWidget *Bn) 3869 4288 { … … 3927 4346 } 3928 4347 3929 /* Funcion para colocar los espacios de los títulos de las cuentas*/ 4348 /** 4349 @brief Función que permite colocar los espacios de los títulos de las cuenta 4350 @date 15/10/2015 4351 @author Rodrigo Boet 4352 @param <Bn> Recibe el widget de la tabla 4353 */ 3930 4354 void MainWindow::titlespanMatrizExgEnd(QTableWidget *Bn) 3931 4355 { … … 3980 4404 } 3981 4405 4406 /** 4407 @brief Función que permite calcular los multiplicadores de leontief para Bn 4408 @date 25/10/2015 4409 @author Rodrigo Boet 4410 @param <Bn> Recibe el widget de la tabla Bn 4411 @param <Mb> Recibe el widget de la tabla Mb 4412 */ 3982 4413 void MainWindow::estimarMb(QTableWidget *Bn,QTableWidget *Mb) 3983 4414 { … … 4033 4464 } 4034 4465 4466 /** 4467 @brief Función que permite calcular un escenario no clásico 4468 @date 25/10/2015 4469 @author Rodrigo Boet 4470 */ 4035 4471 void MainWindow::calcularEscenarioNC() 4036 4472 { … … 4038 4474 } 4039 4475 4476 /** 4477 @brief Función que permite finalizar un escenario no clásico 4478 @date 25/10/2015 4479 @author Rodrigo Boet 4480 */ 4040 4481 void MainWindow::finalizarEscenarioNC() 4041 4482 { … … 4078 4519 } 4079 4520 4521 /** 4522 @brief Función que calcular el resultado de multiplicar Ma por el subtotal del escenario y lo retorna en un vector 4523 @date 25/10/2015 4524 @author Rodrigo Boet 4525 @param <res> Recibe el vector donde se almacenarán los resultados 4526 @return <res> retorna el vector con los elementos 4527 */ 4080 4528 QVector<double> MainWindow::obtenerResultadoEscenarioMNC(QVector<double> res) 4081 4529 { … … 4099 4547 } 4100 4548 4549 /** 4550 @brief Función que permite realizar el cálculo al finalizar un escenario no clásico 4551 @date 18/09/2015 4552 @author Rodrigo Boet 4553 */ 4101 4554 void MainWindow::calcularFinEscenarioMNC(QTableWidget *tw) 4102 4555 { … … 4147 4600 } 4148 4601 4602 /** 4603 @brief Función que permite calcular el subtotal de la matriz Exógena/Endógena 4604 @date 28/10/2015 4605 @author Rodrigo Boet 4606 */ 4149 4607 void MainWindow::calcularSubtotalEndExg() 4150 4608 { … … 4163 4621 } 4164 4622 4623 /** 4624 @brief Función que permite abrir el formulario de comparación de resultados del modelo no clásico 4625 @date 28/10/2015 4626 @author Rodrigo Boet 4627 */ 4165 4628 void MainWindow::slotCompararResultadosMNC() 4166 4629 { … … 4182 4645 } 4183 4646 4647 /** 4648 @brief Función que permite obtener los nombres de los resultados de un escenario no clásico 4649 @date 29/10/2015 4650 @author Rodrigo Boet 4651 @return <nombres> retorna los nombres de los resultados del escenario 4652 */ 4184 4653 QStringList MainWindow::obtenerNombreResultadoEscenarioMNC() 4185 4654 { … … 4193 4662 } 4194 4663 4664 /** 4665 @brief Función que permite generar el resultado de la comparación de los escenarios no clásicos 4666 @date 05/10/2015 4667 @author Rodrigo Boet 4668 */ 4195 4669 void MainWindow::slotVerResultadoMNC() 4196 4670 { … … 4249 4723 4250 4724 //FH_007 4725 /** 4726 @brief Función que permite calcular la incidencia según el modelo clásico 4727 @date 01/11/2015 4728 @author Rodrigo Boet 4729 */ 4251 4730 void MainWindow::slotPHCIncidencia100() 4252 4731 { … … 4270 4749 } 4271 4750 4272 /* Funcion que determina Ma Transpuesta o Ma^T */ 4751 /** 4752 @brief Función que permite determinar Ma Transpuesta o Ma^T 4753 @date 01/11/2015 4754 @author Rodrigo Boet 4755 */ 4273 4756 void MainWindow::calcularMaT() 4274 4757 { … … 4309 4792 } 4310 4793 4311 /* Calcula la incidencia al 100% */ 4794 /** 4795 @brief Función que permite calcular la incidencia al 100% 4796 @date 01/11/2015 4797 @author Rodrigo Boet 4798 @param <tw> Recibe el widget de la tabla 4799 */ 4312 4800 void MainWindow::calcularPHCIncidencia100(QTableWidget *tw) 4313 4801 { … … 4340 4828 } 4341 4829 4830 /** 4831 @brief Función que permite generar una tabla con las incidencias "i" por cuenta 4832 @date 15/09/2015 4833 @author Rodrigo Boet 4834 */ 4342 4835 void MainWindow::slotPHCIncidenciaiCuenta() 4343 4836 { … … 4368 4861 } 4369 4862 4863 /** 4864 @brief Función que permite calcular la incidencia según el modelo clásico por una cuenta seleccionada 4865 @date 02/11/2015 4866 @author Rodrigo Boet 4867 */ 4370 4868 void MainWindow::slotCalcularPHCIncidenciaiCuenta() 4371 4869 { … … 4397 4895 } 4398 4896 4399 /* Funcion para calcular la incidencia "i" en los precios homogéneos clásico (cuenta) */ 4897 /** 4898 @brief Función que permite calcular la incidencia "i" en los precios homogéneos clásico (cuenta) 4899 @date 02/11/2015 4900 @author Rodrigo Boet 4901 @param <tw> Recibe el widget de la tabla 4902 @param <inci> Recibe el diccionario con las cuentas-valor 4903 */ 4400 4904 void MainWindow::calcularPHCIncidenciaI(QTableWidget *tw,QMap<QString,double> inci) 4401 4905 { … … 4424 4928 } 4425 4929 4930 /** 4931 @brief Función que permite calcular la incidencia según el modelo clásico por un componente seleccionado 4932 @date 03/11/2015 4933 @author Rodrigo Boet 4934 */ 4426 4935 void MainWindow::slotPHCIncidenciaiComponente() 4427 4936 { … … 4452 4961 } 4453 4962 4963 /** 4964 @brief Función que permite calcular la incidencia "i" según el modelo clásico por un componente seleccionado 4965 @date 03/11/2015 4966 @author Rodrigo Boet 4967 */ 4454 4968 void MainWindow::slotCalcularPHCIncidenciaiComponente() 4455 4969 { … … 4472 4986 } 4473 4987 4474 /* Funcion para calcular la incidencia "i" en los precios homogéneos clásico (componente) */ 4988 /** 4989 @brief Función que permite calcular la incidencia "i" en los precios homogéneos clásico (componente) 4990 @date 03/11/2015 4991 @author Rodrigo Boet 4992 @param <tw> Recibe el widget de la tabla 4993 @param <ot> Recibe el widget de la tabla donde se colocarán las incidencias 4994 */ 4475 4995 void MainWindow::calcularPHCIncidenciaIComponente(QTableWidget *tw,QTableWidget *ot) 4476 4996 { … … 4499 5019 } 4500 5020 5021 /** 5022 @brief Función que calcular la Ma Transpuesta 5023 @date 04/11/2015 5024 @author Rodrigo Boet 5025 */ 4501 5026 void MainWindow::calcularMbT() 4502 5027 { … … 4568 5093 4569 5094 //FH_008 5095 /** 5096 @brief Función que permite calcular la incidencia al 100% según el modelo no clásico 5097 @date 04/11/2015 5098 @author Rodrigo Boet 5099 */ 4570 5100 void MainWindow::slotPHNCIncidencia100() 4571 5101 { … … 4589 5119 } 4590 5120 4591 /* Funcion para calcular la incidencia "i" en los precios homogéneos no clásico (cuenta)*/ 5121 /** 5122 @brief Función que permite calcular la incidencia "i" en los precios homogéneos no clásico (cuenta) 5123 @date 05/11/2015 5124 @author Rodrigo Boet 5125 @param <tw> Recibe el widget de la tabla 5126 */ 4592 5127 void MainWindow::calcularPHNCIncidencia100(QTableWidget *tw) 4593 5128 { … … 4647 5182 } 4648 5183 5184 /** 5185 @brief Función que permite generar una tabla con las incidencias "i" por cuenta segn el modelo no clásico 5186 @date 05/11/2015 5187 @author Rodrigo Boet 5188 */ 4649 5189 void MainWindow::slotPHNCIncidenciaiCuenta() 4650 5190 { … … 4675 5215 } 4676 5216 5217 /** 5218 @brief Función que permite calcular la incidencia según el modelo no clásico por una cuenta seleccionada 5219 @date 05/11/2015 5220 @author Rodrigo Boet 5221 */ 4677 5222 void MainWindow::slotCalcularPHNCIncidenciaiCuenta() 4678 5223 { … … 4704 5249 } 4705 5250 5251 /** 5252 @brief Función que permite calcular la incidencia según el modelo no clásico por un componente seleccionado 5253 @date 05/11/2015 5254 @author Rodrigo Boet 5255 */ 4706 5256 void MainWindow::slotPHNCIncidenciaiComponente() 4707 5257 { … … 4733 5283 } 4734 5284 5285 /** 5286 @brief Función que permite calcular la incidencia "i" en los precios homogéneos no clásico (componente) 5287 @date 05/11/2015 5288 @author Rodrigo Boet 5289 */ 4735 5290 void MainWindow::slotCalcularPHNCIncidenciaiComponente() 4736 5291 { … … 4754 5309 4755 5310 //FH_009 5311 /** 5312 @brief Función que permite abrir el formulario para las incidencias al 100% 5313 @date 06/11/2015 5314 @author Rodrigo Boet 5315 */ 4756 5316 void MainWindow::slotPNHIncudencia100() 4757 5317 { … … 4774 5334 } 4775 5335 5336 /** 5337 @brief Función que permite cerrar el formulario para las incidencias al 100% 5338 @date 06/11/2015 5339 @author Rodrigo Boet 5340 */ 4776 5341 void MainWindow::slotCloseformPNH() 4777 5342 { … … 4779 5344 } 4780 5345 5346 /** 5347 @brief Función que permite seleccionar los componentes en el formulario para las incidencias al 100% 5348 @date 06/11/2015 5349 @author Rodrigo Boet 5350 */ 4781 5351 void MainWindow::slotSelectPNH() 4782 5352 { … … 4817 5387 } 4818 5388 4819 /* Funcion para calcular el vector Send, que se utiliza para crear una matriz identidad con una diagonal conformada 4820 por los valores de un componente previamente seleccionado */ 5389 /** 5390 @brief Funcion para calcular el vector Send, que se utiliza para crear una matriz identidad con una diagonal conformada 5391 por los valores de un componente previamente seleccionado 5392 @date 06/11/2015 5393 @author Rodrigo Boet 5394 */ 4821 5395 void MainWindow::calcularVectorSend(QString componente,QVector<double> &vector) 4822 5396 { … … 4846 5420 } 4847 5421 5422 /** 5423 @brief Función que permite realizar la multiplicación de matrices en los precios no homogéneos 5424 @date 08/11/2015 5425 @author Rodrigo Boet 5426 @param <tw> Recibe el widget de la tabla 5427 @param <vector> Recibe el vector con los valores que irán en la diagonal principal 5428 */ 4848 5429 void MainWindow::multiplicarMatricesPNH(QTableWidget *tw,QVector<double> vector) 4849 5430 { … … 4924 5505 } 4925 5506 5507 /** 5508 @brief Función que permite realizar la multiplicación de matrices en los precios no homogéneos con incidencia al 100% 5509 @date 10/11/2015 5510 @author Rodrigo Boet 5511 @param <tw> Recibe el widget de la tabla 5512 @param <Diagonal> Recibe el vector con la diagonal principal 5513 */ 4926 5514 void MainWindow::calcularPNHIncidencia100(QTableWidget *tw,MatrixXd Diagonal) 4927 5515 { … … 4954 5542 } 4955 5543 5544 /** 5545 @brief Función que permite abrir el formulario para las incidencias por cuenta en los precios no homogéneos 5546 @date 06/11/2015 5547 @author Rodrigo Boet 5548 */ 4956 5549 void MainWindow::slotPNHIncidenciaiCuenta() 4957 5550 { … … 4975 5568 } 4976 5569 5570 /** 5571 @brief Función que permite seleccionar los componentes el formulario para las incidencias por cuenta en los precios no homogéneos 5572 @date 06/11/2015 5573 @author Rodrigo Boet 5574 */ 4977 5575 void MainWindow::slotSelectPNHi() 4978 5576 { … … 5028 5626 } 5029 5627 5628 /** 5629 @brief Función que permite calcular las incidencias "i" por cuenta en los precios no homogéneos 5630 @date 08/11/2015 5631 @author Rodrigo Boet 5632 */ 5030 5633 void MainWindow::slotCalcularPNHIncidenciaiCuenta() 5031 5634 { … … 5065 5668 } 5066 5669 5670 /** 5671 @brief Función que permite generar una tabla con las incidencias "i" por cuenta en los precios no homogéneos 5672 @date 11/11/2015 5673 @author Rodrigo Boet 5674 */ 5067 5675 void MainWindow::slotPNHIncidenciaiComponente() 5068 5676 { … … 5085 5693 } 5086 5694 5695 /** 5696 @brief Función que permite seleccionar los componentes en el formulario de precios no homogéneos 5697 @date 11/11/2015 5698 @author Rodrigo Boet 5699 */ 5087 5700 void MainWindow::slotSelectPNHic() 5088 5701 { … … 5138 5751 } 5139 5752 5753 /** 5754 @brief Función que permite calcular las incidencias "i" por componentes 5755 @date 12/11/2015 5756 @author Rodrigo Boet 5757 */ 5140 5758 void MainWindow::slotCalcularPNHIncidenciaiComponente() 5141 5759 { … … 5165 5783 } 5166 5784 5785 /** 5786 @brief Función que permite generar el formularios para precios no homogéneos 5787 @date 05/11/2015 5788 @author Rodrigo Boet 5789 */ 5167 5790 void MainWindow::crearFormularioPNH() 5168 5791 { … … 5228 5851 // FV_001 5229 5852 /* A partir de aquí comienzan las operaciones del menu Visualización */ 5230 5853 /** 5854 @brief Función que permite seleccionar un fragmento de una tabla y mostrarla en una pestaña a parte 5855 @date 15/11/2015 5856 @author Rodrigo Boet 5857 */ 5231 5858 void MainWindow::slotSeleccionarTabla() 5232 5859 { … … 5359 5986 } 5360 5987 5361 /* Funcion para agregar el span en los titulos de la matriz seleccionada */5362 void MainWindow::titleSeleccionar(QTableWidget *tw)5363 {5364 QStringList CuentaFila;5365 QStringList CuentaColumna;5366 int fila = tw->rowCount();5367 int columna = tw->columnCount();5368 /* Se crea una lista con las veces que se repiten cuentas en filas/columnas*/5369 //Fila5370 for(int i = 2;i<fila;i++)5371 {5372 CuentaFila.append(tw->item(i,0)->text());5373 }5374 //Columna5375 for(int j = 2;j<columna;j++)5376 {5377 CuentaColumna.append(tw->item(0,j)->text());5378 }5379 /* Se crea el span tomando en cuenta las veces que se repite una cuenta en las listas */5380 //Fila5381 for(int i=2;i<fila-1;i++)5382 {5383 QString accName=tw->item(i,0)->text();5384 if(CuentaFila.contains(accName))5385 {5386 int contar = CuentaFila.count(accName);5387 tw->setSpan(i,0,contar,1);5388 CuentaFila.removeAll(accName);5389 }5390 if(CuentaFila.isEmpty())5391 {5392 break;5393 }5394 }5395 //Columna5396 for(int j=2;j<columna-1;j++)5397 {5398 QString accName=tw->item(0,j)->text();5399 if(CuentaColumna.contains(accName))5400 {5401 int contar = CuentaColumna.count(accName);5402 tw->setSpan(0,j,1,contar);5403 CuentaColumna.removeAll(accName);5404 }5405 if(CuentaColumna.isEmpty())5406 {5407 break;5408 }5409 }5410 }
Note: See TracChangeset
for help on using the changeset viewer.