Qt en Español

Qt en Español es una comunidad de usuarios para aprender a Programar usando las librerias Qt

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Últimos temas
» Desaparecen objetos del formulario al usar showMaximized()
Sáb Sep 13, 2014 9:54 pm por ljimenez29

» visivilidad de controles
Dom Mayo 18, 2014 5:04 pm por solitarywolf

» Error QT (y no sé que más poner ¬¬)
Jue Sep 26, 2013 4:02 pm por Anónimo

» QT, VTK en VS 2008 C++
Jue Abr 11, 2013 5:19 pm por monicadiaz

» [Ayuda]Programa en PyQt4 en modo Pantalla completa
Sáb Mar 30, 2013 8:56 pm por fortil

» SIGNAL y SLOT
Sáb Mar 02, 2013 5:11 pm por loloqt

» Qt creator 5.0.1 en Windows 8...."Qt creator needs a compiler set up to build. Configure a compiler in the kit options"
Miér Feb 27, 2013 4:23 pm por caliche

» mi aplicacion no me lee la base de datos
Jue Oct 18, 2012 1:55 pm por jldiaz

» QT.Para G19 de Logitech
Dom Oct 14, 2012 3:00 am por novax1

Navegación
 Portal
 Índice
 Miembros
 Perfil
 FAQ
 Buscar
Compañeros
Crear foro
Sondeo

Que nombre te gustaria que se llamara el foro?

27% 27% [ 6 ]
18% 18% [ 4 ]
0% 0% [ 0 ]
55% 55% [ 12 ]

Votos Totales : 22


No estás conectado. Conéctate o registrate

Guardar imagenes directo en mysql con qtcreator [Solucionado]

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

Hola bueno solicito un poco de ayuda es que estoy tratando de crear una aplicacion con base de datos con el driver QMYSQL en la cual necesito guardar los datos de empleados con todo y foto(en la misma base de datos) por motivos de que todo se va a centralizar en un servidor remoto y he buscado en google y vienen varios ejemplos pero en php alguien tiene conocimiento sobre el tema que puedar darme una ayuda?.

Lo que hacen las rutinas es lo siguiente:
*************************************************************************************
1.- Se captura la imagen con una camara digital y se copia al disco duro.
2.- Por medio de un QFileDialog localizamos la foto y guardamos su ruta y nombre en un QString llamado archivo_foto
3.- a un QLabel le pongo en el valor setPixmap la ruta y el nombre de la imagen que escogemos en el QFileDialog y se muestra
la foto en la etiqueta.

int MainWindow::captura()
{
QString archivo_foto;
archivo_foto = QFileDialog::getOpenFileName(this,tr("Abrir Archivo"),tr("/home/Imágenes"),tr("Imagenes(*.png *.xpm *.jpg"));
ui->label_foto->setPixmap(archivo_foto);
return 0;
}
*************************************************************************************

Pero el problema viene cuando la quiero guardar con el query donde le agrego en el segundo campo de los VALUES esto
ui->label_foto->pixmap() no se si me falta algo o haya que convertirlo por que en la base de datos este campo lo puse como LongBlob

QSqlQuery query;

query.exec("INSERT INTO `ismed`.`empleados` (`id` ,`foto`,`nombre` ,`apellidop` ,`apellidom` ,`puesto` ,`direccion` ,`fecha_ingreso` ,`salario` ,`depto` ,`activo`)VALUES (NULL ,"+ ui->label_foto->pixmap() +",'"+ui->lineEdit_2->text()+"', '"+ui->lineEdit_3->text()+"', '"+ui->lineEdit_4->text()+"', '"+ui->lineEdit_5->text()+"', '"+ui->lineEdit_6->text()+"', '"+ui->lineEdit_7->text()+"', '"+ui->lineEdit_8->text()+"', '"+ui->lineEdit_9->text()+"', '"+ui->lineEdit_10->text()+"');");

me marca el siguiente error:

/home/horus/sql/mainwindow.cpp:56: error: invalid operands of types ‘const char [167]’ and ‘const QPixmap*’ to binary ‘operator+’

Agradesco de ante mano la ayuda Gracias y en caso de que encuentre yo mismo la solución a esto con gusto la publico para el provecho de todos.

Ver perfil de usuario
hola amigo.

Bueno aquí ayudándote un poco en lo que estas haciendo.

Espero lo que te pongo en seguida te sea de utilidad en lo que estas buscando.

Primero que nada te indico que el campo LONGBLOB L + 4 bytes, where L < 2 a la 32, bueno a parte de eso también dejando muy claramente que este campo recibe byte, ya que puede dar el ruido que estas metiendo otro tipo de datos en este campo.

En Segundo tu error " invalid operands of types ‘const char [167]’ and ‘const QPixmap*’ to binary ‘operator+’ " te esta indicando que tu quieres realizar la conversion de caracteres a byte (binarios), lo cual esto no te permite realizar esta conversión.

En Tercero utiliza QImage, para leer la imagen y despues la conviertes a QPixmap y creo que ya con eso la vas a poder guardar en tu base de datos.

Deja ver un poco mas lo que es estas 2 librerias y te dejo un ejemplo.

Ver perfil de usuario
muy amable de tu parte si me pudieras apoyar con el ejemplo que dices, en verdad gracias

Ver perfil de usuario
estuve preguntando en el foro Qt Centre y esto es lo que me respondieron:

Usted necesita aprender cómo utilizar los valores de la envolvente en las consultas SQL. No sólo se necesitan para datos BLOB, que proporcionan seguridad frente a ataques de inyección SQL también. Aquí está un pequeño ejemplo de una ida y vuelta conseguir una imagen dentro y fuera de una base de datos:

Código:
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QLabel>
#include <QFile>
#include <QByteArray>
#include <QVariant>

QPixmap doSaveAndLoadImage()
{
    /* Open an in-memory database. */
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    bool ok = db.open();

    QString sql = QString("CREATE TABLE T1(img BLOB)");
    QSqlQuery query(db);
    ok = query.exec(sql);

    QFile file("SomeImage.png");
    file.open(QIODevice::ReadOnly);
    QByteArray bytes = file.readAll();

    query.prepare("INSERT INTO T1(img) VALUES(:img)");
    query.bindValue(":img", QVariant(bytes));
    ok = query.exec();

    query.prepare("SELECT img FROM T1");
    ok = query.exec();
    ok = query.first();

    QPixmap pix;
    pix.loadFromData(query.value(0).toByteArray());

    return pix;
}




int main(int argc, char * argv[])
{
    QApplication a(argc, argv);
    QPixmap pix = doSaveAndLoadImage();

    QLabel lbl;
    lbl.setPixmap(pix);
    lbl.show();

    return a.exec();
}

Ver perfil de usuario http://qt-espanol.forosactivos.net

5 acerca del ejemplo el Lun Ene 25, 2010 11:30 pm

Bueno primero que nada muchas gracias por tu apoyo y disculpa la tardanza en contestar pero no he podido hechar a anda tu ejemplo en qtcreator me podrias apoyar con algun ejemplo ya en qtcretor? en serio disculpame pero aun estoy verde en esto jeje

Ver perfil de usuario

6 bueno ya pude guardarla el Mar Ene 26, 2010 12:42 am

hola ya pude guardarla pero al momento de mostrarla en la etiqueta no sale bien la imagen
Código:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <qsqldatabase.h>
#include <QSqlError>
#include <QtSql>
#include <QFileDialog>
#include <QList>

#include <QDebug>
#include <QSqlQuery>
#include <QFile>
#include <QByteArray>
#include <QVariant>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//////////////////////////////////////////////////
QPixmap MainWindow::buscala()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("memo");
    db.setUserName("root");
    db.setPassword("xxxxxxxx");
    bool ok = db.open();

QString sql = QString("CREATE TABLE T1(img BLOB)");
QSqlQuery query(db);
ok = query.exec(sql);

//---------------------------------------//
QString archivo_foto;
archivo_foto = QFileDialog::getOpenFileName(this,tr("Abrir Archivo"),tr("/home"),tr("Imagenes(*.png *.xpm *.*"));

QFile file(archivo_foto);
file.open(QIODevice::ReadOnly);
QByteArray bytes = file.readAll();
//---------------------------------------//



query.prepare("INSERT INTO T1(img) VALUES(:img)");
query.bindValue(":img", QVariant(bytes));
ok = query.exec();

query.prepare("SELECT img FROM T1");
ok = query.exec();
ok = query.first();

QPixmap pix;
pix.loadFromData(query.value(0).toByteArray());
return pix;
}
//////////////////////////////////////////////////
int MainWindow::sq()
{
QPixmap pix = buscala();
ui->label->setPixmap(pix);

    return 0;
}




te edite el post ya que la imagen era muy grande. xD

Ver perfil de usuario

8 wow ya se pudo el Mar Ene 26, 2010 12:57 am

ya se pudo hacr el problema era que necesitaba ser LONGBLOB en vez de BLOB muchas gracias subo el codigo por si alguien mas lo necesita
Código:

////////  MainWindow.cpp /////////////////

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <qsqldatabase.h>
#include <QSqlError>
#include <QtSql>
#include <QFileDialog>
#include <QList>

#include <QDebug>
#include <QSqlQuery>
#include <QFile>
#include <QByteArray>
#include <QVariant>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//////////////////////////////////////////////////
QPixmap MainWindow::buscala()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("memo");
    db.setUserName("root");
    db.setPassword("horusats");
    bool ok = db.open();

QString sql = QString("CREATE TABLE T2(img LONGBLOB)");
QSqlQuery query(db);
ok = query.exec(sql);

//---------------------------------------//
QString archivo_foto;
archivo_foto = QFileDialog::getOpenFileName(this,tr("Abrir Archivo"),tr("/home"),tr("Imagenes(*.png *.xpm *.*)"));

QFile file(archivo_foto);
file.open(QIODevice::ReadOnly);
QByteArray bytes = file.readAll();
//---------------------------------------//



query.prepare("INSERT INTO T2(img) VALUES(:img)");
query.bindValue(":img", QVariant(bytes));
ok = query.exec();

query.prepare("SELECT img FROM T2");
ok = query.exec();
ok = query.last();

QPixmap pix;
pix.loadFromData(query.value(0).toByteArray());
return pix;
}
//////////////////////////////////////////////////
int MainWindow::sq()
{
QPixmap pix = buscala();
ui->label->setPixmap(pix);

    return 0;
}

//////////// MainWindow.h ///////////////////////////
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    public slots:
        QPixmap buscala();
        int sq();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H







vuelvo a editarte la imagen, no necesitas que poner [img][/img]. lo que puedes hacer es donde dice Embed thumbnails of this image para que asi la imagen sea mas chica.

Ver perfil de usuario
que bien que ya lo hayas solucionado xD. lastima que no ise nada para ayudarte.
seria una buena dia de que crearas un tutorial sobre eso xD Very Happy

Ver perfil de usuario http://qt-espanol.forosactivos.net

10 Claro que desde luego que si el Mar Ene 26, 2010 1:10 am

Con gusto hare un breve tutorial de como hice este ejemplo, me encantaria ayudar a tu foro aunque aun estoy iniciando en esto de c++ con QTCreator. No soy experto, pero tratare de explicarlo y haber si alguien que sepa mas del tema lo refina sale?

Ver perfil de usuario
muchas gracias por ayudar en el foro.

yo tambien soy principiante en esto de C++ y Qt.
tal vez esto te va a interesar. en mi blog TuxMaya creare una serie de articulos relacionados con Qt mas adelante lo agregare al foro. el proximo articulo lo hare este fin de semana y ya se entrara de ello a la programacion. creare unos ejemplos de como crear un pequeno programita escribiendo el codigo y de como disenarlo con el qt designer xD

Ver perfil de usuario http://qt-espanol.forosactivos.net

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.