Falls/solange das on_refreshBtn_Cklicked() Event gerade seinen Code ausführt, soll ein Click auf den Refreshbutton ignoriert werden. Offenbar wird der Refresh Button aber nie Blockiert, während loadInterfaces() ausgeführt wird. Wird der Refresh-Button 10 mal schnell geklickt wird loadInterfaces auch 10 mal nacheineander ausgeführt.
Qt hat gar keine Zeit die anderen Events zu verwerfen da zwischen dem disconnect und dem connect die Eventloop nirgends aufgerufen wird. D.h. die Events können nicht abgearbeitet werden.
btw: QObject::connect() ist eine statische Funktion, nicht nötig ui->refreshBtn->connect() zu schreiben
Heisst das die Events werden linear hintereinander und nicht paralell abgearbeitet. Wäre es der richtige Lösungsansatz das Event in einem seperaten Thread zu packen? Sorry, ich hatte mit Threads noch kaum was zu zu zun, in c++ schon gar nicht...
Das Problem ist: wenn man den Button mehrmals klickt, dann wird mehrmals mal eine Processbar aufgerufen und nacheinander abgearbeitet. Das sieht nicht schön aus und das komplette Programm blockiert, bis alles abgearbeitet wurde.
Natürlich könnte man sagen "selbst schuld", man braucht ja auch nicht 10 mal klicken! Wäre aber keine Lösung.
Je nach dem was deine loadInterfaces Funktion macht hast du mehrere Möglichkeiten:
Wenn ein weiteres Fenster erzeugt wird:
1. Ein Modalen Kinderdialog verwenden (ggf. ableiten).
2. Für die dauer wie dieses angezeigt wird den Button deaktivieren. (setEnabled)