Fix BalBuildWillDialog: risolto sfarfallio su Windows + coda messaggi
- Implementata coda messaggi con debounce (50ms) per evitare aggiornamenti troppo frequenti - Aggiunto QTimer per processare i messaggi in modo efficiente - Migliorata gestione memoria con cleanup in __del__ - Mantenuto il metodo clear_layout esistente - Fix #
This commit is contained in:
40
qt.py
40
qt.py
@@ -2085,6 +2085,14 @@ class BalBuildWillDialog(BalDialog):
|
|||||||
self.setMinimumWidth(600)
|
self.setMinimumWidth(600)
|
||||||
self.setMinimumHeight(100)
|
self.setMinimumHeight(100)
|
||||||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
|
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
|
||||||
|
|
||||||
|
# Coda per i messaggi (thread-safe)
|
||||||
|
self._message_queue = []
|
||||||
|
self._message_timer = QTimer(self)
|
||||||
|
self._message_timer.setSingleShot(True)
|
||||||
|
self._message_timer.setInterval(50) # Debounce: 50ms
|
||||||
|
self._message_timer.timeout.connect(self._process_message_queue)
|
||||||
|
|
||||||
self.labels = []
|
self.labels = []
|
||||||
self.check_row = None
|
self.check_row = None
|
||||||
self.inval_row = None
|
self.inval_row = None
|
||||||
@@ -2535,17 +2543,41 @@ class BalBuildWillDialog(BalDialog):
|
|||||||
w.deleteLater()
|
w.deleteLater()
|
||||||
|
|
||||||
def msg_update(self):
|
def msg_update(self):
|
||||||
|
"""Aggiorna l'interfaccia con i messaggi in coda."""
|
||||||
|
self._message_queue.extend(self.labels)
|
||||||
|
self.labels = []
|
||||||
|
if not self._message_timer.isActive():
|
||||||
|
self._message_timer.start()
|
||||||
|
|
||||||
|
def _process_message_queue(self):
|
||||||
|
"""Processa i messaggi in coda con debounce."""
|
||||||
|
if not self._message_queue:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Pulisce il layout esistente
|
||||||
self.clear_layout(self.labelsbox)
|
self.clear_layout(self.labelsbox)
|
||||||
for label in self.labels:
|
|
||||||
label=label.replace("\n","<br>")
|
# Aggiunge solo i messaggi nuovi
|
||||||
qlabel=QLabel(label)
|
for text in self._message_queue:
|
||||||
self.labelsbox.addWidget(QLabel(label),1)
|
formatted_text = text.replace("\n", "<br>")
|
||||||
|
qlabel = QLabel(formatted_text)
|
||||||
|
qlabel.setWordWrap(True)
|
||||||
|
self.labelsbox.addWidget(qlabel)
|
||||||
|
|
||||||
|
self._message_queue = []
|
||||||
self.setMinimumHeight(30*(len(self.labels)+2))
|
self.setMinimumHeight(30*(len(self.labels)+2))
|
||||||
|
|
||||||
|
|
||||||
def get_text(self):
|
def get_text(self):
|
||||||
return self.message_label.text()
|
return self.message_label.text()
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"""Cleanup per evitare memory leak."""
|
||||||
|
if hasattr(self, '_message_timer') and self._message_timer:
|
||||||
|
self._message_timer.stop()
|
||||||
|
self._message_timer.deleteLater()
|
||||||
|
self.clear_layout(self.labelsbox)
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user