Bucle de datos con QProcess
Publicado por kapyderi (1 intervención) el 23/11/2010 13:12:04
Buenas.
Me presento, soy kapyderi del foro de Mandriva Linux www.blogdrake.net y estoy realizando una utilidad en QT y C++, que anteriormente la tenia hecha en Zenity y Bash, pero me he adentrado en este mundo y necesito saber un pequeño detalle, que no soy capaz de resolver.
Necesito saber como podria implementar este bucle en un system() o QProcess, ya que he buscado ejemplos y no se las posiblidades de dichas funciones, exactamente.
Ejemplo:
Un fichero con los siguientes datos:
1.rpm 2.rpm 3.rpm
Ejemplo con system():
void recoverdrake::on_actionRecuperar_paquetes_huerfanos_Eliminados_triggered()
{
int respuesta = 0;
respuesta = QMessageBox::question(this, tr("Recuperar paquetes huerfanos"),
tr("<center><b>Recuperar paquetes huerfanos<b></center><p>"
"Mediante esta opcion podemos recupera los paquetes "
"huerfanos eliminados, ya que los volvera a instalar.<p>"
"Es importante en el caso de inestabilidad del sistema.<p>"
"<b>Este proceso se realizara en la consola principal.</b><p>"
"<B>NOTA: Debe esperar a que termine completamente el "
"proceso seleccionado, el cual le sera notificado "
"cuando finalice.</B>"), QMessageBox::Ok, QMessageBox::No);
if (respuesta == QMessageBox::Ok){
QString path="/home/%1/Documentos/BackOrphans.lst";
path=path.arg(user);
QString fileName = QFileDialog::getOpenFileName(this,tr("Abrir fichero"),
path,tr("Fichero de listado (.lst)"));
if (!fileName.isEmpty())
return;
QString cmd = "bin/sh for Recuperar in `cat %2`; do urpmi -a --auto $Recuperar; done";
cmd = cmd.arg(fileName);
system(cmd.toAscii().data());}
return;
}
Ejemplo con QProcess() [No tengo ni idea de como implementarlo]:
void recoverdrake::on_actionRecuperar_paquetes_huerfanos_Eliminados_triggered()
{
int respuesta = 0;
respuesta = QMessageBox::question(this, tr("Recuperar paquetes huerfanos"),
tr("<center><b>Recuperar paquetes huerfanos<b></center><p>"
"Mediante esta opcion podemos recupera los paquetes "
"huerfanos eliminados, ya que los volvera a instalar.<p>"
"Es importante en el caso de inestabilidad del sistema.<p>"
"<b>Este proceso se realizara en la consola principal.</b><p>"
"<B>NOTA: Debe esperar a que termine completamente el "
"proceso seleccionado, el cual le sera notificado "
"cuando finalice.</B>"), QMessageBox::Ok, QMessageBox::No);
if (respuesta == QMessageBox::Ok){
QString path="/home/%1/Documentos/BackOrphans.lst";
path=path.arg(user);
QString fileName = QFileDialog::getOpenFileName(this,tr("Abrir fichero"),
path,tr("Fichero de listado (.lst)"));
if (!fileName.isEmpty())
return;
QString cmd = "bin/sh for Recuperar in `cat %2`; do urpmi -a --auto $Recuperar; done";
QStringList comandos;
comandos<< cmd;
if (mib != 0)
delete mib;
mib = new DrakeProcesos(comandos, this);
connect(mib, SIGNAL(publicarDatos(QString)), this, SLOT(mibEscribir(QString)));
connect(mib, SIGNAL(finProceso()), this, SLOT(mibFin()));
mib->iniciarProceso();}
return;
}
y no hace nada, cuando deberia de descagar los tres paquetes anteriores en la consola de Linux.
¿Por que no hace nada y como deberia de ser aplicado?
Gracias por vuestra paciencia y ayuda.
PD.: Si necesitais que os pase cualquier .cpp .h o lo que necesiteis para saber partes de las funciones, no dudar en comentarmelo.
Saludos!!!!
Me presento, soy kapyderi del foro de Mandriva Linux www.blogdrake.net y estoy realizando una utilidad en QT y C++, que anteriormente la tenia hecha en Zenity y Bash, pero me he adentrado en este mundo y necesito saber un pequeño detalle, que no soy capaz de resolver.
Necesito saber como podria implementar este bucle en un system() o QProcess, ya que he buscado ejemplos y no se las posiblidades de dichas funciones, exactamente.
Ejemplo:
Un fichero con los siguientes datos:
1.rpm 2.rpm 3.rpm
Ejemplo con system():
void recoverdrake::on_actionRecuperar_paquetes_huerfanos_Eliminados_triggered()
{
int respuesta = 0;
respuesta = QMessageBox::question(this, tr("Recuperar paquetes huerfanos"),
tr("<center><b>Recuperar paquetes huerfanos<b></center><p>"
"Mediante esta opcion podemos recupera los paquetes "
"huerfanos eliminados, ya que los volvera a instalar.<p>"
"Es importante en el caso de inestabilidad del sistema.<p>"
"<b>Este proceso se realizara en la consola principal.</b><p>"
"<B>NOTA: Debe esperar a que termine completamente el "
"proceso seleccionado, el cual le sera notificado "
"cuando finalice.</B>"), QMessageBox::Ok, QMessageBox::No);
if (respuesta == QMessageBox::Ok){
QString path="/home/%1/Documentos/BackOrphans.lst";
path=path.arg(user);
QString fileName = QFileDialog::getOpenFileName(this,tr("Abrir fichero"),
path,tr("Fichero de listado (.lst)"));
if (!fileName.isEmpty())
return;
QString cmd = "bin/sh for Recuperar in `cat %2`; do urpmi -a --auto $Recuperar; done";
cmd = cmd.arg(fileName);
system(cmd.toAscii().data());}
return;
}
Ejemplo con QProcess() [No tengo ni idea de como implementarlo]:
void recoverdrake::on_actionRecuperar_paquetes_huerfanos_Eliminados_triggered()
{
int respuesta = 0;
respuesta = QMessageBox::question(this, tr("Recuperar paquetes huerfanos"),
tr("<center><b>Recuperar paquetes huerfanos<b></center><p>"
"Mediante esta opcion podemos recupera los paquetes "
"huerfanos eliminados, ya que los volvera a instalar.<p>"
"Es importante en el caso de inestabilidad del sistema.<p>"
"<b>Este proceso se realizara en la consola principal.</b><p>"
"<B>NOTA: Debe esperar a que termine completamente el "
"proceso seleccionado, el cual le sera notificado "
"cuando finalice.</B>"), QMessageBox::Ok, QMessageBox::No);
if (respuesta == QMessageBox::Ok){
QString path="/home/%1/Documentos/BackOrphans.lst";
path=path.arg(user);
QString fileName = QFileDialog::getOpenFileName(this,tr("Abrir fichero"),
path,tr("Fichero de listado (.lst)"));
if (!fileName.isEmpty())
return;
QString cmd = "bin/sh for Recuperar in `cat %2`; do urpmi -a --auto $Recuperar; done";
QStringList comandos;
comandos<< cmd;
if (mib != 0)
delete mib;
mib = new DrakeProcesos(comandos, this);
connect(mib, SIGNAL(publicarDatos(QString)), this, SLOT(mibEscribir(QString)));
connect(mib, SIGNAL(finProceso()), this, SLOT(mibFin()));
mib->iniciarProceso();}
return;
}
y no hace nada, cuando deberia de descagar los tres paquetes anteriores en la consola de Linux.
¿Por que no hace nada y como deberia de ser aplicado?
Gracias por vuestra paciencia y ayuda.
PD.: Si necesitais que os pase cualquier .cpp .h o lo que necesiteis para saber partes de las funciones, no dudar en comentarmelo.
Saludos!!!!
Valora esta pregunta


0