Qt listar procesos | Qt eliminar objetos

Iniciado por patilanz, 12 Noviembre 2014, 23:53 PM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

Hola tengo esto:

Código (cpp) [Seleccionar]
while (Process32Next(handle, &process)){
::process * _process = new ::process();
_process->name = new QLabel(ui.processes_widged_area);
_process->close = new QPushButton(ui.processes_widged_area);
_process->folder = new QPushButton(ui.processes_widged_area);
_process->suspend = new QPushButton(ui.processes_widged_area);

char _name[261];
wcstombs(_name,process.szExeFile,260);
_process->name->setText(_name);
_process->close->setText("Close");
_process->folder->setText("Open dir");
_process->suspend->setText("Suspend");

processes.insert(processes.end(), _process);

ui.gridLayout_4->addWidget(_process->name, processes.size(), 1, 1, 1);
ui.gridLayout_4->addWidget(_process->close,processes.size(),2,1,1);
ui.gridLayout_4->addWidget(_process->folder, processes.size(), 3, 1, 1);
ui.gridLayout_4->addWidget(_process->suspend, processes.size(), 4, 1, 1);
}



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

Código (cpp) [Seleccionar]
for (int i = 0; i < processes.size(); i++){
processes[i]->folder->deleteLater();
processes[i]->close->deleteLater();
processes[i]->name->deleteLater();
processes[i]->suspend->deleteLater();
}


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

Alguien me puede ayudar ?

Saludos

eferion

#1
qué tipo de contenedor es "processes"??

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

patilanz

#2
Gracias por responder. Process no me pareció interesante:

Código (cpp) [Seleccionar]
struct process{
public:
QLabel *name;
QPushButton *close;
QPushButton *suspend;
QPushButton *folder;
};


El contenedor lo puse antes:
Código (cpp) [Seleccionar]
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  :-(

Eternal Idol

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).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

patilanz

#4
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?