Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 12 Noviembre 2014, 23:53 pm



Título: Qt listar procesos | Qt eliminar objetos
Publicado por: patilanz en 12 Noviembre 2014, 23:53 pm
Hola tengo esto:

Código
  1. while (Process32Next(handle, &process)){
  2. ::process * _process = new ::process();
  3. _process->name = new QLabel(ui.processes_widged_area);
  4. _process->close = new QPushButton(ui.processes_widged_area);
  5. _process->folder = new QPushButton(ui.processes_widged_area);
  6. _process->suspend = new QPushButton(ui.processes_widged_area);
  7.  
  8. char _name[261];
  9. wcstombs(_name,process.szExeFile,260);
  10. _process->name->setText(_name);
  11. _process->close->setText("Close");
  12. _process->folder->setText("Open dir");
  13. _process->suspend->setText("Suspend");
  14.  
  15. processes.insert(processes.end(), _process);
  16.  
  17. ui.gridLayout_4->addWidget(_process->name, processes.size(), 1, 1, 1);
  18. ui.gridLayout_4->addWidget(_process->close,processes.size(),2,1,1);
  19. ui.gridLayout_4->addWidget(_process->folder, processes.size(), 3, 1, 1);
  20. ui.gridLayout_4->addWidget(_process->suspend, processes.size(), 4, 1, 1);
  21. }


processes es std::vector<process *> processes;
Es una funcion que tiene que refrescar los procesos. Para esto necesito borrar los anteriores:

Código
  1. for (int i = 0; i < processes.size(); i++){
  2. processes[i]->folder->deleteLater();
  3. processes[i]->close->deleteLater();
  4. processes[i]->name->deleteLater();
  5. processes[i]->suspend->deleteLater();
  6. }

Pero es aquí donde falla. Con el típico mensaje de infracción de acceso.

Alguien me puede ayudar ?

Saludos


Título: Re: Qt listar procesos
Publicado por: eferion en 13 Noviembre 2014, 08:24 am
qué tipo de contenedor es "processes"??

EDITO: bueno, ya puestos, la interfaz de "process" también sería interesante conocerla


Título: Re: Qt listar procesos
Publicado por: patilanz en 13 Noviembre 2014, 16:02 pm
Gracias por responder. Process no me pareció interesante:

Código
  1. struct process{
  2. public:
  3. QLabel *name;
  4. QPushButton *close;
  5. QPushButton *suspend;
  6. QPushButton *folder;
  7. };

El contenedor lo puse antes:
Código
  1. std::vector<process *> processes;

@Edit: Si nadie sabe como resolver mi código, como listaríais los procesos de forma gráfica con sus 3 botones para las acciones  ? :P



El problema es como eliminar objetos de qt. Creo que voy a cambiar de titulo.
Se como ocultarlos pero quiero vaciar la memoria porque cada vez que se vuelven a refrescar los procesos se tendrán que crear botones y textos de nuevo y ocupar mas memoria y encima al crear lo hace lento y el programa se para por un segundo.

Hay otra manera? Agradezco cualquier ayuda  :-(


Título: Re: Qt listar procesos | Qt eliminar objetos
Publicado por: Eternal Idol en 15 Noviembre 2014, 11:51 am
No tengo ni la menor idea de Qt pero seguro que hay otras maneras como una lista de procesos y 3 botones en total (el boton toma el proceso seleccionado en la lista) o en lugar de botones un menu contextual (el que se muestra al usar el boton derecho del mouse).


Título: Re: Qt listar procesos | Qt eliminar objetos
Publicado por: patilanz en 15 Noviembre 2014, 15:54 pm
El problema no es en crear los objetos sino en eliminarlos. Cuando los creo un objeto, no importa si es botón texto u otra cosa luego para actualizar tengo que eliminarlos para crear los de nuevo y actualizar los procesos.

Como lo hace el administrador de tareas de windows que esta todo el tiempo actualizando?