Si has intentado descargar el SDK de Qt para linux verás que la pag de descarga está muy lenta. De aquí la podrás descargar para Linux x86_64:
https://drive.google.com/open?id=0B9uuluhrKpGKSmtFekNNU3A3STQ
Mostrando entradas con la etiqueta qt. Mostrar todas las entradas
Mostrando entradas con la etiqueta qt. Mostrar todas las entradas
lunes, 27 de junio de 2016
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:
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í:
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
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
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:
cannot find -lGL
Debes instalar el paquete mesa-libGL-devel desde terminal:
dnf install mesa-libGL-devel
jueves, 23 de abril de 2015
Solución: Ejecución lenta de evaluateJavaScript()
Si cuando intentas ejecutar el método evaluateJavaScript() el método hace que todo se cuelgue por unos momentos es porque el sistema esta evaluando el valor de retorno de la ultima instrucción de javascript e intentando convertirla a un tipo de dato QVariant. Esto ocasiona un costo alto cuando usas jQuery. Puesto que este retorna un objeto de jQuery que luego debe ser evaluado enteramente por Qt lo cual consume mucho tiempo de procesador.
La solución es hacer que la ultima instrucción sea un valor nulo
La solución es hacer que la ultima instrucción sea un valor nulo
myWebElement->evaluateJavaScript( myScript + "; null" );
Yo por ejemplo utilizo este método para cargar jQuery en la pag
void BrowserWindow::loadJQuery()
{
QFile file("jquery.min.js");
file.open(QFile::ReadOnly);
weView()->page()->mainFrame()->evaluateJavaScript(file.readAll()+";null");
}
domingo, 12 de abril de 2015
Compilar QupZilla en Fedora
Primero nos descargamos el src. En este caso lo descargué de rpm.pbone.net
Source: http://rpm.pbone.net/index.php3/stat/26/dist/96/size/3216881/name/qupzilla-1.8.6-3.fc21.src.rpm
Luego instalamos hunspell-devel
yum install hunspell-devel hunspell*
Luego debemos descomprimir el fichero src.rpm
Dentro del directorio descomprimido el habrá otro fichero .tar.gz que debemos descomprimir.
Luego abrimos QtCreator y seleccionamos "Open File or Project" y buscamos el fichero QupZilla.pro
Source: http://rpm.pbone.net/index.php3/stat/26/dist/96/size/3216881/name/qupzilla-1.8.6-3.fc21.src.rpm
Luego instalamos hunspell-devel
yum install hunspell-devel hunspell*
Luego debemos descomprimir el fichero src.rpm
Dentro del directorio descomprimido el habrá otro fichero .tar.gz que debemos descomprimir.
Luego abrimos QtCreator y seleccionamos "Open File or Project" y buscamos el fichero QupZilla.pro
Para evitar el error "libQupZilla.so.1: cannot open shared object file" debes agregar el siguiente texto al FINAL fichero ./lib/defines/defines.pri:
DEFINES *= NO_SYSTEM_DATAPATH
Luego compilas y corres.
Ya con esto deberías tener QupZilla listo para modificar
domingo, 15 de marzo de 2015
Listar ficheros y carpetas con Qt
SI queremos saber los nombres de los ficheros y carpetas dentro de un directorio debemos usar la clase QDir con el método entryList()
QStringList lista=QDir("./Graficos").entryList();
// Imprime todos los ficheros y subdirectorios del directório "Graficos"
qDebug()<<lista;
sábado, 21 de febrero de 2015
QRegExp: explicación rápida y sin marisqueras
Ejemplo #1: Detectar un número de dos dígitos
"([0-9]{2,2})"
Explicación
[0-9]: Dígito del 0 al 9
{2,2}: Mínimo 2 y máximo 2 (Modifica al anterior que es [0-9]).
Pruebas:
QRegExp rx("([0-9]{2,2})"); rx.indexIn("123"); // Lo encuentra en 0
rx.indexIn("-asd66"); // Lo encuentra en 4
rx.indexIn("6"); // No encuentra
Ejemplo #2: Detectar las x de un polinomio y sus coeficientes"([0-9]{,}x)"Explicación[0-9]: Dígito del 0 al 9{ , }: Indica que la x puede tener o no un número adelante (cuando el coeficiente es 1 se no es necesario colocarselo)x: Carácter xPruebas:QRegExp rx("([0-9]{,}x)"); rx.indexIn("2y+3x"); // Lo encuentra en 3
rx.indexIn("2y+345x"); // Lo encuentra en 3rx.indexIn("2y+x"); // Lo encuentra en 3rx.indexIn("2y-5"); // No lo encuentra rx.indexIn("6"); // No encuentra
domingo, 8 de febrero de 2015
Ejemplo Qt5 + Postgres
En la entrada anterior expliqué como se configuraba fedora para conectar qt5 con postgres. Ahora aquí se muestra un ejemplo de una aplicación en Qt que se conecta con una BD en postgres.
Primero creamos la BD de ejemplo desde pgadmin3. En este caso se llama BD_UNEG
CREATE DATABASE "BD_UNEG"
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'es_VE.UTF-8'
LC_CTYPE = 'es_VE.UTF-8'
CONNECTION LIMIT = -1;
-- Table: persona
CREATE TABLE persona
(
cedula character varying(20) NOT NULL,
nombre character varying(50),
tipo character varying(30),
estatus character varying(30),
carrera character varying(30),
CONSTRAINT persona_pkey PRIMARY KEY (cedula)
)
WITH (
OIDS=FALSE
);
ALTER TABLE persona
OWNER TO postgres;
Quedaría así
Ahora agrega algo a la BD.
NOTA: En este ejemplo la clave de postgres es 123456 y el puerto es 5432
Este es el código en Qt que busca todos los elementos de la tabla persona y los muestra
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QStringList>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlRecord>
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("127.0.0.1"); // Nombre del host
db.setDatabaseName("BD_UNEG"); // Nombre de la BD
db.setPort(5432); // Puerto
db.setUserName("postgres"); // Usuario
db.setPassword("123456"); // Contraseña
// Si esta abierto entonce retorna true
if (db.isOpen()){
qWarning() <<"La conexión ya estaba creada";
return true;
}
// Abre la BD
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << (createConnection() ? "Se crea la conexión :)" : "ERROR al conectar :(");
QSqlQuery qry;
qry.prepare( "SELECT * FROM persona" );
if( !qry.exec() )
qDebug() << qry.lastError();
else
{
qDebug( "Seleccionado!" );
QSqlRecord rec = qry.record();
int cols = rec.count();
for( int c=0; c<cols; c++ )
qDebug() << QString( "Columna %1: %2" ).arg( c ).arg( rec.fieldName(c) );
for( int r=0; qry.next(); r++ )
for( int c=0; c<cols; c++ )
qDebug() << QString( "Fila %1, %2: %3" ).arg( r ).arg( rec.fieldName(c) ).arg( qry.value(c).toString() );
}
return a.exec();
}
Recuerda agregar QT += sql en el fichero .pro
Links de interes:
http://www.informit.com/articles/article.aspx?p=1405550
http://www.java2s.com/Code/Cpp/Qt/ConnecttoMySqlwithQSqlDatabaseanddoselectupdateinsertanddelete.htm
http://www.ics.com/designpatterns/solutions/qsqldatabase.html
Qt + Postgresql en Fedora 21
Para usar una bd en postgresql usando Qt en fedora 21 primero debes instalar el driver de postgresql
yum install qt5-qtbase-postgresql
Luego en el proyecto agregar la linea sql en el fichero .pro de nuestro proyecto
yum install qt5-qtbase-postgresql
Luego en el proyecto agregar la linea sql en el fichero .pro de nuestro proyecto
Listo :) Ahora puesdes probar el driver usando el siguiente código:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QStringList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Available drivers: " << QSqlDatabase::drivers();
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");
return a.exec();
}
Aqui pongo un ejemplo más pulido:
jueves, 5 de febrero de 2015
Libreria GLPK con Qt Creator
Primero debes instalar glpk en tu distribucion de linux
En fedora basta con
En fedora basta con
yum install glpk*
Al intentar compilar un ejemplo de glpk en qt creator me mostraba esta falla.
Para corregirlo solo debes agregar la siguiente linea a tu fichero .pro
LIBS += -lglpk
Recompilas y listo. En este caso me muestra la versión de Qt
Este es el ejemplo mostrado
#include "stdio.h"
#include "glpk.h"
int main(int argc, const char *argv[])
{
printf("GLPK Version: %s\n", glp_version());
return 0;
}
viernes, 2 de enero de 2015
Colocar un Widget de Qt arriba de otro
jueves, 25 de diciembre de 2014
Conectar señales de Qt con funciones en C
La nueva sintaxis de Qt 5 nos permite conectar señales de objetos de Qt con funciones estáticas comunes.
Para ello usamos la siguiente sintaxis:
connect(emisor, &ClaseDelEmisor::señal, funcion);
Por ejemplo:
/** Cuando se vence el tiempo del timer y se envia
la señal timeout() se ejecuta la función f **/
Para ello usamos la siguiente sintaxis:
connect(emisor, &ClaseDelEmisor::señal, funcion);
Por ejemplo:
connect(timer, &QTimer::timeout, &f );Ejemplo:
/** Cuando se vence el tiempo del timer y se envia
la señal timeout() se ejecuta la función f **/
void f(){
qDebug()<<"&timer.timeout ----> f()";
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTimer *timer = new QTimer();
// Se conecta la señal timeout con la función f
timer->connect(timer, &QTimer::timeout, &f );
timer->start(1000);
return a.exec();
}
Diagrama:
Links:
miércoles, 17 de diciembre de 2014
Mover objetos con transiciones en Qt con QPropertyAnimation
Aqui explicaremos como mover un objeto de Qt de un lugar a otro de la pantalla y que este se valla deslizando:
Basta con crear una animación de movimiento con QPropertyAnimation.
// Se crea la animación
// el parámetro OBJETO es el objeto que queremos mover
// Puede ser un QLabel, QGraphicsWidget, etc
QPropertyAnimation *animation = new QPropertyAnimation(OBJETO, "pos");
// Duración de la animación. El tiempo desde que sale hasta que llega
animation->setDuration(1000);
// Posición inicial de donde va a partir
animation->setStartValue(QPointF(this->x(), this->y()));
// Posición final a donde va a llegar// En este caso le estoy diciendo que se mantenga en el mismo// valor de x pero que varie el valor de Y en 100 px
animation->setEndValue(QPointF(this->x(), this->y()+100));
// Inicia la animación
animation->start(QAbstractAnimation::DeleteWhenStopped);
Este es un ejemplo compilable:
#include <QtCore> #include <QtWidgets> #include <QObject> #include <QCoreApplication> /** @brief Representa una figura cuadrada **/ class Cuadrado : public QGraphicsWidget { public: /** Constructor * @param colorDeseado Color que el usuario desea * Puede ser "azul" o "rojo". En caso contrario * la pieza se dibujará gris **/ Cuadrado(QString colorDeseado):QGraphicsWidget(){ // Asigna el color segun el color deseado color= colorDeseado=="rojo"? Qt::red : (colorDeseado=="azul"?Qt::blue : Qt::gray); } ~Cuadrado(){} /** Pinta la pieza segun el color **/ void paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget *){ painter->fillRect(rect(), color); } void mover(qreal xEnd,qreal yEnd){ // Aqui crea la animación QPropertyAnimation *animation = new QPropertyAnimation(this,"pos"); animation->setDuration(8000); // 8 Segundos animation->setStartValue(QPointF(this->x(), this->y())); animation->setEndValue(QPointF(xEnd, yEnd)); animation->start(QAbstractAnimation::DeleteWhenStopped); } private: /** Color del cuadrado **/ Qt::GlobalColor color; }; int main(int argc, char **argv) { QApplication app(argc, argv); // Creamos un cuadro rojo y uno azul Cuadrado *cuadroAzul=new Cuadrado("azul"); Cuadrado *cuadroRojo=new Cuadrado("rojo"); // Los movemos a la posición inicial cuadroAzul->moveBy(60,10); cuadroRojo->moveBy(10,10); // Se crea la escena QGraphicsScene scene(0, 0,600, 600); // Se agrega los cuadros a la escena scene.addItem(cuadroAzul); scene.addItem(cuadroRojo); // Se mueve con animación cuadroAzul->mover(200,500); cuadroRojo->mover(100,500); QGraphicsView window(&scene); window.show(); return app.exec(); }
Etiquetas:
animacion,
animar,
animation,
curva,
ejemplo QPropertyAnimation,
linea,
mover,
object,
QGraphicsWidget,
QLabel,
QPropertyAnimation,
qt
Suscribirse a:
Entradas (Atom)
















