void MainWindow::on_tableView_clicked(const QModelIndex &index)
{
if(!index.isValid()){
return;
}
btnEdit->setEnabled(true);
btnDelete->setEnabled(true);
btnSave->setEnabled(true);
btnImg->setEnabled(true);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
QString id=mModel->data(mModel->index(index.row(),0)).toString();
QSqlQuery q;
q.exec("SELECT id_elemento, id_grupo, id_tipo, nombre, descripcion, icono FROM elemento WHERE id_elemento= '" + id +"' ;");
qDebug()<<id;
q.first();
qDebug() << q.lastError();
lineCod->setText(q.value(0).toString());
lineGroup->setText(q.value(1).toString());
lineType->setText(q.value(2).toString());
lineName->setText(q.value(3).toString());
textDescription->setPlainText(q.value(4).toString());
lineImg->setText(q.value(5).toByteArray());
QPixmap pixmap;
if(!pixmap.loadFromData(q.value(5).toByteArray())){
labelImg->setText("<b>Error de Imagen</b>");
return;
}
labelImg->setScaledContents(true);
int w = labelImg->width();
int h = labelImg->height();
w=200;
h=100;
labelImg->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
labelImg->setAlignment(Qt::AlignCenter);
labelImg->setPixmap(pixmap.scaled(w,h,Qt::KeepAspectRatio));
}
void MainWindow::on_toolButton_clicked()
{
imagenAdr=QFileDialog::getOpenFileName(this,"Escojer Icono",QDir::rootPath(),"*png");
QFile archivo(imagenAdr);
if(!archivo.open(QIODevice::ReadOnly)){
QMessageBox::critical(this,"Error",archivo.errorString());
return;
}
lineImg->setText(imagenAdr);
labelImg->setScaledContents(true);
int w = labelImg->width();
int h = labelImg->height();
w=200;
h=100;
labelImg->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
labelImg->setAlignment(Qt::AlignCenter);
labelImg->setPixmap(QPixmap(imagenAdr).scaled(w,h,Qt::KeepAspectRatio));
}
void MainWindow::on_btnEdit_clicked()
{
QFile archivo(lineImg->text());
if(!archivo.open(QIODevice::ReadOnly)){
QMessageBox::critical(this,"Error",archivo.errorString());
return;
}
mElemento=Elemento(lineCod->text(),(lineGroup->text()).toInt(),(lineType->text()).toInt(),
lineName->text(),textDescription->toPlainText(),archivo.readAll());
QMessageBox::StandardButton reply;
reply=QMessageBox::question(this,"Cancelar",
"¿Está seguro de que desea actualizar el valor de el elemento especificado de la base de datos?",
QMessageBox::Yes | QMessageBox::No);
if(reply==QMessageBox::No){
QMessageBox::information(this,"Cancelado","Ha cancelado la actualización del elemento");
}
if(reply==QMessageBox::Yes){
QMessageBox::information(this,"Aprobado","Ha actualizado el elemento");
if(!elem->editarElemento(mElemento)){
return;
}
archivo.close();
cargar();
btnSave->setEnabled(true);
btnDelete->setEnabled(true);
btnImg->setEnabled(true);
btnEdit->setEnabled(true);
}
}
bool Elemento::editarElemento( Elemento &elemento)
{
QString id=elemento.idElemento();
int gru=elemento.idGrupo();
int tip=elemento.idTipo();
QString nom=elemento.nombre();
QString des=elemento.descripcion();
QByteArray icono=elemento.icono();
QSqlQuery q;
q.prepare("UPDATE elemento SET id_elemento=:id, id_grupo=:grupo, id_tipo=:tipo, nombre=:nombre, descripcion=:descripcion, icono=:icono WHERE id_elemento='"+id+"';");
q.bindValue(":id", id);
q.bindValue(":grupo",gru);
q.bindValue(":tipo", tip);
q.bindValue(":nombre",nom);
q.bindValue(":descripcion", des);
q.bindValue(":icono",icono);
q.exec();
bool ok=q.exec();
if(!ok){
QSqlError mError=q.lastError().text();
qDebug()<<mError;
}
return ok;
}
Summary- > If I take the image out of the table it gives me an error when editing, but if I manually insert it everything works perfectly. I guess when loading the lineImg from the table something is wrong.