Hola tengo esto:
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:
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
qué tipo de contenedor es "processes"??
EDITO: bueno, ya puestos, la interfaz de "process" también sería interesante conocerla
Gracias por responder. Process no me pareció interesante:
struct process{
public:
QLabel *name;
QPushButton *close;
QPushButton *suspend;
QPushButton *folder;
};
El contenedor lo puse antes:
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 :-(
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).
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?