Changeset e62517a in mmcs for mainwindow.C


Ignore:
Timestamp:
Aug 31, 2016, 5:18:22 PM (8 years ago)
Author:
rudmanmrrod <rudman22@…>
Branches:
master
Children:
0b59ba5
Parents:
4c71262
Message:

Migrado el proyecto a la versión 5 de Qt, agregado primer boceto del PDF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mainwindow.C

    r4c71262 re62517a  
    1111#include <stackencadenamientos.h>
    1212#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*/
    1320
    1421using namespace Eigen;
     
    1623//  FA_001
    1724/*                      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*/
    1830void MainWindow::slotLoadMatrix()
    1931{
     
    2234    connect(formLoadMatrix, SIGNAL(formAccepted(QString,int,int)),
    2335            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*/
    2848void MainWindow::slotFormLoadMatrixAccepted(const QString & filePath,
    2949                                            int accountNumber, int pre)
     
    3757}
    3858
     59/**
     60    @brief Función que permite cerrar el formulario de carga de matriz
     61    @date 03/04/2015
     62    @author José Ruiz
     63*/
    3964void MainWindow::slotFormLoadMatrixClosed()
    4065{
     
    4469}
    4570
    46 /*
    47     Función que permite agregar un mensaje en el label cuando se selecciona la opción de cuentas
    48     Autor: Rodrigo Boet
    49     Fecha: 29/07/2016
     71/**
     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
    5075*/
    5176void MainWindow::slotOnlyaccount()
    5277{
    53     formLoadMatrix->ui.label_info->setText("Info: Para esta opción debe agregar debe cargar un csv con las cuentas y componentes");
    54 
    55 }
    56 
    57 /*
    58     Función que permite agregar un mensaje en el label cuando se selecciona la opción de componentes
    59     Autor: Rodrigo Boet
    60     Fecha: 29/07/2016
     78    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
    6186*/
    6287void MainWindow::slotOnlycomponent()
    6388{
    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*/
    6998void MainWindow::slotNuevoProyecto()
    7099{
     
    80109}
    81110
     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*/
    82116void MainWindow::slotExportMatrix()
    83117{
     
    167201}
    168202
     203/**
     204    @brief Función que permite cerrar el formulario para exportar la matriz
     205    @date 10/10/2015
     206    @author Rodrigo Boet
     207*/
    169208void MainWindow::slotCloseExport()
    170209{
     
    173212}
    174213
     214/**
     215    @brief Función que permite exportar una matriz a csv
     216    @date 10/10/2015
     217    @author Rodrigo Boet
     218*/
    175219void MainWindow::slotSaveExport()
    176220{
     
    224268}
    225269
     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*/
    226275void MainWindow::slotSearchExport()
    227276{
     
    238287}
    239288
     289/**
     290    @brief Función que permite cargar la matriz mostrada al inicio
     291    @date 10/04/2015
     292    @author José Ruiz
     293*/
    240294void MainWindow::createCentralWidget()
    241295{
     
    278332}
    279333
    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*/
    281339void MainWindow::createMenuBar()
    282340{
     
    300358}
    301359
     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*/
    302365void MainWindow::matricesMenuBar()
    303366{
     
    447510}
    448511
     512/**
     513    @brief Función que permite cerrar todo el programa
     514    @date 03/04/2015
     515    @author José Ruiz
     516*/
    449517void MainWindow::closeEvent(QCloseEvent * event)
    450518{
     
    457525}
    458526
     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*/
    459534void MainWindow::createMatrixCentralWidget()
    460535{
     
    484559    //layoutCentralWidget->addStretch();
    485560
    486     if(formLoadMatrix->ui.radioAccount->isChecked()){
     561    if(formLoadMatrix->ui->radioAccount->isChecked()){
    487562        QStringList accounts = get_list(tableWidget,0,2,tableWidget->columnCount());
    488563        numAccounts = diferent_elements(accounts);
     
    577652
    578653    /*  ***********         Se agrega la columna en la que se asignan los nombre            **************           */
    579     if(formLoadMatrix->ui.radioComponent->isChecked())
     654    if(formLoadMatrix->ui->radioComponent->isChecked())
    580655    {
    581656        tableWidget->insertRow(0);
     
    595670        }
    596671    }
    597     else if(formLoadMatrix->ui.radioAccount->isChecked()){
     672    else if(formLoadMatrix->ui->radioAccount->isChecked()){
    598673        loadsAccounts(tableWidget);
    599674    }
     
    616691}
    617692
     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*/
    618701void MainWindow::populateTable(QTableWidget * tableWidget)
    619702{
     
    627710    CrearTablaVacia(column+2,tableWidget);//Se crea una tabla vacia a modo de matriz cuadrada
    628711    QStringList Accounts;
    629     if(formLoadMatrix->ui.radioAccount->isChecked())
     712    if(formLoadMatrix->ui->radioAccount->isChecked())
    630713    {
    631714        Accounts = lines;
     
    681764    }
    682765    //Se agregan las cuentas si se selecciono la opción correspondiente
    683     if(formLoadMatrix->ui.radioAccount->isChecked())
     766    if(formLoadMatrix->ui->radioAccount->isChecked())
    684767    {
    685768        noEditColZero(tableWidget);
     
    705788}
    706789
    707 /*
    708     Función para cargar las cuentas
    709     Autor: Rodrigo Boet
    710     Fecha: 29/07/2016
    711     @param <QTableWidget> *tw -> Recibe como parametro una widget de tabla de qt
     790/**
     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
    712795*/
    713796void MainWindow::loadsAccounts(QTableWidget *tw)
     
    762845}
    763846
     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*/
    764856QString MainWindow::numberFormat(double & d) {
    765857
     
    791883//  FA_002
    792884/*                  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*/
     890void MainWindow::abrirManual()
    794891{
    795892    QDesktopServices::openUrl(QUrl("/usr/share/mmcs/Usuario/Entrada.html",QUrl::TolerantMode));
    796893}
    797894
     895/**
     896    @brief Función para abrir la sección acerca de
     897    @date 20/10/2015
     898    @author Rodrigo Boet
     899*/
    798900void MainWindow::acercaDe()//Funcion para el mensaje acerca de
    799901{
     
    807909//  Main_001
    808910/*                      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*/
    809918MainWindow::MainWindow()
    810919    : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this),
     
    861970}
    862971
     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*/
    863977void MainWindow::initGUI()
    864978{
     
    872986//Main_002
    873987/*              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*/
    875993void MainWindow::slotAccChange()
    876994{
     
    8911009}
    8921010
    893 /*
    894     Función para esconder el StackWidget que tiene los datos de las cuentas
    895     Autor: Rodrigo Boet
    896     Fecha: 29/07/2016
     1011/**
     1012    @brief Función para esconder el StackWidget que tiene los datos de las cuentas
     1013    @date 29/07/2016
     1014    @author Rodrigo Boet
    8971015*/
    8981016void MainWindow::hideStackedWidget()
     
    9281046}
    9291047
     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*/
    9301053void MainWindow::AgregarCuenta()
    9311054{
     
    10621185}
    10631186
     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*/
    10641192void MainWindow::FinalizarCuentas()
    10651193{
     
    11021230}
    11031231
    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
    11091239*/
    11101240void MainWindow::TotalPrincipalTable(QTableWidget *tw,MatrixXd &Matriz,int init)
     
    11331263}
    11341264
     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*/
    11351273void MainWindow::CalcularTotales(QTableWidget *tableWidget,int inicio,bool &iguales)//Se calculan los totales por fila/columna
    11361274{
     
    11921330}
    11931331
    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*/
     1337void MainWindow::RestaurarCeldas()
    11951338{
    11961339    QMessageBox msBox(QMessageBox::Question,"Restaurar Celdas","¿Desea Restaurar el titulo de todas las celdas?",
     
    12161359}
    12171360
    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*/
     1366void MainWindow::ModificarCuenta()
    12191367{
    12201368    QMessageBox msBox(QMessageBox::Question,"Modificar Cuenta","¿Desea Modificar la Cuenta Actual?",
     
    12351383}
    12361384
    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*/
     1391bool MainWindow::ComprobarCuentas()
    12381392{
    12391393    bool centinela=true;
     
    12631417}
    12641418
     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*/
    12651427bool MainWindow::comprobarNombreCuenta(QString nombre,int indice)
    12661428{
     
    12771439}
    12781440
    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*/
    12801448QStringList MainWindow::ObtenerNombreCuenta(int contador)
    12811449{
     
    12891457}
    12901458
    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*/
    12931467QList<int> MainWindow::ObtenerLimitesCuenta(int contador,int opccion)
    12941468{
     
    13131487//FG_001
    13141488
     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*/
    13151499void MainWindow::CalcularAn(QTableWidget *tw,QTableWidget *nuevaTabla,QTableWidget *tablaOriginal,int count,bool endogena)//Funcion para calcular el Coeficiente Tecnico Horizontal (An)
    13161500{
     
    13861570}
    13871571
    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*/
     1579int MainWindow::ObtenerIndice(QString text)
    13891580{
    13901581    int cantidad=tabWidget->count();
     
    14011592}
    14021593
    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*/
    14361600void MainWindow::titleEndogena(QTableWidget *tw)
    14371601{
     
    14771641}
    14781642
    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*/
    14881649void MainWindow::setAccountTitle(QTableWidget *tw)
    14891650{
     
    15291690
    15301691/*                  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*/
    15311701void MainWindow::insertremoveRowCol(QTableWidget *tw, int rowcol, bool opcion)
    15321702{
     
    15451715}
    15461716
    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*/
    15481725QString MainWindow::Separador(QTableWidgetItem *ti,bool quitar)
    15491726{
     
    15621739}
    15631740
     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*/
    15641749void MainWindow::clonarTabla(QTableWidget *tw,QTableWidget *nuevaTabla,int cantidad)
    15651750{
     
    16051790}
    16061791
    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*/
    16401797QStringList MainWindow::obtenerCuentas()
    16411798{
     
    16561813//FH_001
    16571814/*          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*/
    16581821void MainWindow::slotCoeficienteVertical()
    16591822{
     
    16821845}
    16831846
     1847/**
     1848    @brief Función que permite calcular el coeficiente técnico horizontal
     1849    @date 11/05/2015
     1850    @author Rodrigo Boet
     1851*/
    16841852void MainWindow::slotCoeficienteHorizontal()
    16851853{
     
    17481916
    17491917//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*/
    17501923void MainWindow::slotVariableExogena()
    17511924{
     
    18492022}
    18502023
     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*/
    18512029void MainWindow::slotCloseExogena()
    18522030{
     
    18542032}
    18552033
     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*/
    18562040void MainWindow::slotDeshacerExogena()
    18572041{
     
    18752059}
    18762060
     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*/
    18772066void MainWindow::slotAgregarExogena()
    18782067{
     
    18802069    QString nombre_cuenta=stackVE->comboAccount->currentText();//Se obtiene el nombre de la cuenta seleccionado
    18812070    QListWidget *lw=new QListWidget;
    1882     //lw=stackVE->veWidget->accounListWidget;
    18832071    int index=stackVE->comboAccount->currentIndex();//Se obtiene el indice selecionado
    18842072    lw = findChild<QListWidget *>(QString("accountlist %1").arg(index + 1));//Se obtiene la lista seleccionada
     
    19092097}
    19102098
     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*/
    19112104void MainWindow::slotFinalizarExogena()
    19122105{
     
    21122305
    21132306//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*/
    21152312void MainWindow::EndogenaAn()
    21162313{
     
    21412338}
    21422339
     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*/
    21432345void MainWindow::slotMa()
    21442346{
     
    21472349}
    21482350
    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*/
    22022360void MainWindow::setEndogenaExogenaCell(QTableWidget *tw,int inicioExogena,int elementos,bool condicion)
    22032361{
     
    22702428}
    22712429
    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*/
    22732436void MainWindow::restarIdentidadAn(QTableWidget *tw)
    22742437{
     
    23232486}
    23242487
    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*/
    23262495void MainWindow::crearDiccionario(QTableWidget *tw, bool endogena)
    23272496{
     
    23672536}
    23682537
    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*/
    23702546QStringList MainWindow::obtenerCuentasEndogenas(QTableWidget *tw,QStringList list)
    23712547{
     
    23812557}
    23822558
    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*/
    23842567QStringList MainWindow::obtenerCuentasExogenas(QTableWidget *tw,QStringList list)
    23852568{
     
    23962579}
    23972580
    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*/
    23992590void MainWindow::spanEndogenaCell(QTableWidget *tw,int inicio,int celda,bool endex)
    24002591{
     
    24362627}
    24372628
     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*/
    24382636void MainWindow::spanExogenaCell(QTableWidget *tw,int celda)
    24392637{
     
    24682666}
    24692667
    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*/
    24712673void MainWindow::obtenerCuentaComponentes()
    24722674{
     
    25052707}
    25062708
    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*/
    25182718void MainWindow::calcularSubtotal(QTableWidget *tw, int inicio, int fin,int exogena)
    25192719{
     
    25392739}
    25402740
    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*/
    25552747void MainWindow::calcularTotalCuentas(QTableWidget *tw)
    25562748{
     
    25722764}
    25732765
    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*/
    25752771void MainWindow::estimarVectorPonderacion()
    25762772{
     
    25912787
    25922788//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*/
    25942794void MainWindow::slotEncadenamientos()
    25952795{
     
    26992899}
    27002900
     2901/**
     2902    @brief Función que permite cerrar la ventana de los encadenamientos
     2903    @date 01/08/2015
     2904    @author Rodrigo Boet
     2905*/
    27012906void MainWindow::slotCloseEncadenamiento()
    27022907{
     
    27042909}
    27052910
    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*/
    27072916void MainWindow::slotAgregarEncadenamiento()
    27082917{
     
    27542963}
    27552964
     2965/**
     2966    @brief Función que permite ver los encadenamientos
     2967    @date 01/08/2015
     2968    @author Rodrigo Boet
     2969*/
    27562970void MainWindow::slotVerEncadenamiento()
    27572971{
     
    27873001            QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    27883002            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
    27893032            QWidget *widget = tabWidget->widget(indice);
    27903033            widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     
    28123055            QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    28133056            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
    28143086            QWidget *widget = tabWidget->widget(indice);
    28153087            widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     
    28283100}
    28293101
    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*/
    28313109void MainWindow::crearMatrizEncadenamiento(QTableWidget *tw,QTableWidget *enTable)
    28323110{
     
    29003178    enTable->insertRow(0);
    29013179    QTableWidgetItem *encAtras = new QTableWidgetItem("Encadenamiento Parcial\nhacia atrás");
    2902     encademientosStyle(encAtras);
     3180    encadenamientosStyle(encAtras);
    29033181    QTableWidgetItem *encAdelante = new QTableWidgetItem("Encadenamiento Parcial\nhacia adelante");
    2904     encademientosStyle(encAdelante);
     3182    encadenamientosStyle(encAdelante);
    29053183    enTable->setItem(0,2,encAtras);
    29063184    enTable->setItem(0,3,encAdelante);
     
    29233201}
    29243202
     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*/
    29253210void MainWindow::cuentacomponentesEncadenamiento(QTableWidget *to,int count)
    29263211{
     
    29683253}
    29693254
    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*/
    29713263void MainWindow::crearMatrizEncadenamientoEndogena(QTableWidget *tw,QTableWidget *enTable, Eigen::MatrixXd Matrix)
    29723264{
     
    30043296    enTable->insertRow(0);
    30053297    QTableWidgetItem *encAtras = new QTableWidgetItem("Encadenamiento Parcial\nhacia atrás");
    3006     encademientosStyle(encAtras);
     3298    encadenamientosStyle(encAtras);
    30073299    QTableWidgetItem *encAdelante = new QTableWidgetItem("Encadenamiento Parcial\nhacia adelante");
    3008     encademientosStyle(encAdelante);
     3300    encadenamientosStyle(encAdelante);
    30093301    enTable->setItem(0,2,encAtras);
    30103302    enTable->setItem(0,3,encAdelante);
     
    30263318}
    30273319
    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*/
    30393326void MainWindow::calcularTotalesEncadenamientos(QTableWidget *tw)
    30403327{
     
    30753362        tw->setItem(count,0,zero);
    30763363        QTableWidgetItem *titulo = new QTableWidgetItem(QString("Encadenamiento Parcial %1, Total").arg(accName.at(k)));
    3077         encademientosStyle(titulo);
     3364        encadenamientosStyle(titulo);
    30783365        tw->setItem(count,1,titulo);
    30793366        QTableWidgetItem *totalAtras = new QTableWidgetItem(QString::number(sumaAtras,'f',precission));
    30803367        QString value = Separador(totalAtras,false);
    30813368        totalAtras->setText(value);
    3082         encademientosStyle(totalAtras);
     3369        encadenamientosStyle(totalAtras);
    30833370        QTableWidgetItem *totalAdelante = new QTableWidgetItem(QString::number(sumaAdelante,'f',precission));
    30843371        value = Separador(totalAdelante,false);
    30853372        totalAdelante->setText(value);
    3086         encademientosStyle(totalAdelante);
     3373        encadenamientosStyle(totalAdelante);
    30873374        tw->setItem(count,2,totalAtras);
    30883375        tw->setItem(count,3,totalAdelante);
     
    30903377}
    30913378
    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*/
    30933384void MainWindow::slotClasificarCuentas()
    30943385{
     
    31213412}
    31223413
    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*/
    31243419void MainWindow::obtenerUiUj(QTableWidget *tw, QVector<double> &ui, QVector<double> &uj)
    31253420{
     
    31593454}
    31603455
    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*/
    31623465void MainWindow::calcularClasificador(QTableWidget *tw, QVector<double> ui, QVector<double> uj,int init)
    31633466{
     
    32143517}
    32153518
     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*/
    32163525void MainWindow::agregarPrimeraCelda(QTableWidget *tw)
    32173526{
     
    32393548}
    32403549
     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*/
     3555void 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*/
     3567void 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
    32413597//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*/
    32423603void MainWindow::slotModeloClasico()
    32433604{
     
    32973658
    32983659}
    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*/
    33003669void MainWindow::llenarEscenario(QTableWidget *tw,bool clasico)
    33013670{
     
    33613730}
    33623731
     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*/
    33633739void MainWindow::calcularEscenario(bool clasico)
    33643740{
     
    34233799}
    34243800
     3801/**
     3802    @brief Función que permite finalizar un escenario
     3803    @date 18/09/2015
     3804    @author Rodrigo Boet
     3805*/
    34253806void MainWindow::finalizarEscenario()
    34263807{
     
    34633844}
    34643845
     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*/
    34653851void MainWindow::calcularFinEscenario(QTableWidget *tw)
    34663852{
     
    35113897}
    35123898
    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*/
    35143906QVector<double> MainWindow::obtenerResultadoEscenario(QVector<double> res)
    35153907{
     
    35323924}
    35333925
     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*/
    35343931void MainWindow::slotCompararResultados()
    35353932{
     
    35513948}
    35523949
     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*/
    35533956QStringList MainWindow::obtenerNombreResultadoEscenario()
    35543957{
     
    35623965}
    35633966
     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*/
    35643972void MainWindow::slotVerResultado()
    35653973{
     
    36164024}
    36174025
    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*/
    36474034void MainWindow::cuentacomponentesResultado(QTableWidget *to, int count,bool clasico)
    36484035{
     
    36954082
    36964083//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*/
    36974089void MainWindow::slotModeloNoClasico()
    36984090{
     
    37054097}
    37064098
     4099/**
     4100    @brief Función que permite obtener las Matriz Exógena/Endógena
     4101    @date 12/10/2015
     4102    @author Rodrigo Boet
     4103*/
    37074104void MainWindow::obtenerMatrizExgEnd()
    37084105{
     
    37634160}
    37644161
     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*/
    37654167void MainWindow::calcularMb()
    37664168{
     
    37964198    opcionMb++;
    37974199}
    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*/
    37994206void MainWindow::crearMatrizExgEnd(QTableWidget *MatrizEndogenaExogena,QTableWidget *MatrizExgEnd,int elementos,int inicioExogena)
    38004207{
     
    38224229}
    38234230
    3824 /*
    3825     Función que almacena los valores del fragmento exogeno/endogeno la tabla Tipo de variables
    3826     Autor: Rodrigo Boet
    3827     Fecha: 22/06/2016
    3828     @param <int> elementos -> Recibe como párametro la cantidad de elemntos que tiene esa sección
    3829     @param <int> cantidad -> Recibe como parametro el inicio de del fragmento exogeno/endogeno
     4231/**
     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
    38304237*/
    38314238void MainWindow::TotalEndoExoTable(int elementos, int cantidad)
     
    38424249}
    38434250
    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*/
    38454257void MainWindow::calcularMatrizExgEnd(QTableWidget *MatrizExgEnd)
    38464258{
     
    38664278}
    38674279
     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*/
    38684287void MainWindow::ctvMatrizExgEnd(QTableWidget *MatrizExgEnd,QTableWidget *Bn)
    38694288{
     
    39274346}
    39284347
    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*/
    39304354void MainWindow::titlespanMatrizExgEnd(QTableWidget *Bn)
    39314355{
     
    39804404}
    39814405
     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*/
    39824413void MainWindow::estimarMb(QTableWidget *Bn,QTableWidget *Mb)
    39834414{
     
    40334464}
    40344465
     4466/**
     4467    @brief Función que permite calcular un escenario no clásico
     4468    @date 25/10/2015
     4469    @author Rodrigo Boet
     4470*/
    40354471void MainWindow::calcularEscenarioNC()
    40364472{
     
    40384474}
    40394475
     4476/**
     4477    @brief Función que permite finalizar un escenario no clásico
     4478    @date 25/10/2015
     4479    @author Rodrigo Boet
     4480*/
    40404481void MainWindow::finalizarEscenarioNC()
    40414482{
     
    40784519}
    40794520
     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*/
    40804528QVector<double> MainWindow::obtenerResultadoEscenarioMNC(QVector<double> res)
    40814529{
     
    40994547}
    41004548
     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*/
    41014554void MainWindow::calcularFinEscenarioMNC(QTableWidget *tw)
    41024555{
     
    41474600}
    41484601
     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*/
    41494607void MainWindow::calcularSubtotalEndExg()
    41504608{
     
    41634621}
    41644622
     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*/
    41654628void MainWindow::slotCompararResultadosMNC()
    41664629{
     
    41824645}
    41834646
     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*/
    41844653QStringList MainWindow::obtenerNombreResultadoEscenarioMNC()
    41854654{
     
    41934662}
    41944663
     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*/
    41954669void MainWindow::slotVerResultadoMNC()
    41964670{
     
    42494723
    42504724//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*/
    42514730void MainWindow::slotPHCIncidencia100()
    42524731{
     
    42704749}
    42714750
    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*/
    42734756void MainWindow::calcularMaT()
    42744757{
     
    43094792}
    43104793
    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*/
    43124800void MainWindow::calcularPHCIncidencia100(QTableWidget *tw)
    43134801{
     
    43404828}
    43414829
     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*/
    43424835void MainWindow::slotPHCIncidenciaiCuenta()
    43434836{
     
    43684861}
    43694862
     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*/
    43704868void MainWindow::slotCalcularPHCIncidenciaiCuenta()
    43714869{
     
    43974895}
    43984896
    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*/
    44004904void MainWindow::calcularPHCIncidenciaI(QTableWidget *tw,QMap<QString,double> inci)
    44014905{
     
    44244928}
    44254929
     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*/
    44264935void MainWindow::slotPHCIncidenciaiComponente()
    44274936{
     
    44524961}
    44534962
     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*/
    44544968void MainWindow::slotCalcularPHCIncidenciaiComponente()
    44554969{
     
    44724986}
    44734987
    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*/
    44754995void MainWindow::calcularPHCIncidenciaIComponente(QTableWidget *tw,QTableWidget *ot)
    44764996{
     
    44995019}
    45005020
     5021/**
     5022    @brief Función que calcular la Ma Transpuesta
     5023    @date 04/11/2015
     5024    @author Rodrigo Boet
     5025*/
    45015026void MainWindow::calcularMbT()
    45025027{
     
    45685093
    45695094//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*/
    45705100void MainWindow::slotPHNCIncidencia100()
    45715101{
     
    45895119}
    45905120
    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*/
    45925127void MainWindow::calcularPHNCIncidencia100(QTableWidget *tw)
    45935128{
     
    46475182}
    46485183
     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*/
    46495189void MainWindow::slotPHNCIncidenciaiCuenta()
    46505190{
     
    46755215}
    46765216
     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*/
    46775222void MainWindow::slotCalcularPHNCIncidenciaiCuenta()
    46785223{
     
    47045249}
    47055250
     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*/
    47065256void MainWindow::slotPHNCIncidenciaiComponente()
    47075257{
     
    47335283}
    47345284
     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*/
    47355290void MainWindow::slotCalcularPHNCIncidenciaiComponente()
    47365291{
     
    47545309
    47555310//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*/
    47565316void MainWindow::slotPNHIncudencia100()
    47575317{
     
    47745334}
    47755335
     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*/
    47765341void MainWindow::slotCloseformPNH()
    47775342{
     
    47795344}
    47805345
     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*/
    47815351void MainWindow::slotSelectPNH()
    47825352{
     
    48175387}
    48185388
    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*/
    48215395void MainWindow::calcularVectorSend(QString componente,QVector<double> &vector)
    48225396{
     
    48465420}
    48475421
     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*/
    48485429void MainWindow::multiplicarMatricesPNH(QTableWidget *tw,QVector<double> vector)
    48495430{
     
    49245505}
    49255506
     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*/
    49265514void MainWindow::calcularPNHIncidencia100(QTableWidget *tw,MatrixXd Diagonal)
    49275515{
     
    49545542}
    49555543
     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*/
    49565549void MainWindow::slotPNHIncidenciaiCuenta()
    49575550{
     
    49755568}
    49765569
     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*/
    49775575void MainWindow::slotSelectPNHi()
    49785576{
     
    50285626}
    50295627
     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*/
    50305633void MainWindow::slotCalcularPNHIncidenciaiCuenta()
    50315634{
     
    50655668}
    50665669
     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*/
    50675675void MainWindow::slotPNHIncidenciaiComponente()
    50685676{
     
    50855693}
    50865694
     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*/
    50875700void MainWindow::slotSelectPNHic()
    50885701{
     
    51385751}
    51395752
     5753/**
     5754    @brief Función que permite calcular las incidencias "i" por componentes
     5755    @date 12/11/2015
     5756    @author Rodrigo Boet
     5757*/
    51405758void MainWindow::slotCalcularPNHIncidenciaiComponente()
    51415759{
     
    51655783}
    51665784
     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*/
    51675790void MainWindow::crearFormularioPNH()
    51685791{
     
    52285851//  FV_001
    52295852/*                      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*/
    52315858void MainWindow::slotSeleccionarTabla()
    52325859{
     
    53595986}
    53605987
    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     //Fila
    5370     for(int i = 2;i<fila;i++)
    5371     {
    5372         CuentaFila.append(tw->item(i,0)->text());
    5373     }
    5374     //Columna
    5375     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     //Fila
    5381     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     //Columna
    5396     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.