jueves, 30 de julio de 2015

QtXlsx: Leer y escribir en ficheros .xlsx con Qt

La mejor librería (que he probado) para trabajar con ficheros .xlsx en Qt es QtXlsx.

Para usarla primero debes descargar el src desde aqui:

Si quieres visiar el repo en github:
https://github.com/dbzhang800/QtXlsxWriter


Luego de descargarlo lo descomprimimos en el directorio de nuestro proyecto de Qt


Luego vamos al fichero .pro de nuestro proyecto y agregamos la siguiente linea:

include(QtXlsxWriter-master/src/xlsx/qtxlsx.pri)



Compilas y listo, ya estas listo para el primer ejemplo:
Este código nos permitiría leer las dos primeras columnas de todas las filas.

void Ventana::leerTodo()
{
    QXlsx::Document *docIN= new QXlsx::Document("data.xlsx");
    int nFilas=docIN->dimension().lastRow();

    for (int i = 2; i <= nFilas; ++i) {
        QString nombre  =docIN->read(("A"+QString::number(i)).toString());
        QString apellido=docIN->read(("B"+QString::number(i)).toString());
        
        qWarning()<<"   Nombre  : "<<nombre;
        qWarning()<<"   Apellido: "<<apellido;
        
    }
}

El fichero .xlsx usado es algo así:





Saber si existe un directorio o fichero en Qt (QDir QFile)

Para ver si un directorio existe, si no existe entonces lo crea:

QDir dir;
if ( !dir.exists("/home/usuario")){
        qWarning()<<"/home/usuario No existe";
        // Si no existe lo crea
        dir.mkdir("/home/usuario");
}


Para ver si un directorio existe, si no existe entonces lo crea:
QFile file;
if ( !file.exists("/home/usuario")){
        qWarning()<<"/home/usuario No existe";
        // Si no existe lo crea
        file.mkdir("/home/usuario");
}



Para ver si un (documento, archivo, fichero) existe, si no existe entonces lo crea:
void Configuracion::crearDocumento(QSting path){
    QFile file(path);
    if ( !file.exists(path) ){
         qWarning()<<path+" No existe";
         file.setFileName(path);
         file.open(QIODevice::WriteOnly);
         file.close();
    }
}

martes, 28 de julio de 2015

Importar libreria JGroups en NetBeans

Quiźas intentaste correr algún código y te mostraba el error "package org.jgroups does not exist"
Esto pasa porque debes incluir la libreria JGruup dentro de tu proyecto



Para usar la libreria JGrups en NetBeans debes hacer los siguientes pasos:

Puedes descargar este código de ejemplo y lo agregas a tu proyecto de NetBeans para probar que JGroups funcione:
ProgrammaticChat.java


2- Descargas los ficheros .jar de JGroups en su pag oficial:


En este caso descargamos la última versión (3.6.4)

Una vez ahí debemos descargar los dos .jar y guardarlos en el directorio del proyecto de NetBeans


3- Entras en NetBeans y entras en Tools --> Libraries



4- En la nueva ventana creada seleccionas New Library


5- Le ponemos el nombre JGroups y luego en OK



6- En classpath agregamos el .jar binario y en Sources agregamos el de Sources





Luego te vas a las propiedades del proyecto 


y Agregas la libreria JGroup que acabamos de crear



Y listo, ya no hay errores






viernes, 24 de julio de 2015

Solucionar libgstapp-0.10.so.0 en Fedora Qt Creator

Si al momento de abrir Qt Creator o ejecutar un programa te sale el siguiente código de error:

libgstapp-0.10.so.0: cannot open shared object file: No such file or directory


Entonces debes instalar el paquete gstreamer-plugins-base
con:

dnf install gstreamer-plugins-base

jueves, 23 de julio de 2015

Aplicar StyleSheet SOLO a un Widget en especifico en Qt

Intentando hacer un widget me encontré que cuando aplicaba un StyleSheet al widget central, todos sus hijos heredaban su valor, en mi caso, su imagen de fondo. 

Para poder aplicar un StyleSheet a un widget sin que sus hijos hereden pueden hacer lo siguiente:

QWidget#NombreDelWidget{
// Estilo
}

Por ejemplo:

QWidget#centralWidget{
        border-image: url(:/media/centralFinal.jpg) 0 0 0 0 stretch stretch;
}

domingo, 19 de julio de 2015

Solucion -lGL Qt Creator Fedora 22

Si cuando intentas compilar tu primer programa de Qt Creator te lanza el siguiente error:
cannot find -lGL


Debes instalar el paquete mesa-libGL-devel desde terminal:


dnf install mesa-libGL-devel