Fix Qt cleanup warning with proper worker lifecycle management

- Keep reference to active worker in dialog instance
- Use deleteLater() for Signals QObject cleanup
- Prevents "shared QObject deleted directly" warning

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rob 2025-12-30 04:07:36 -04:00
parent 0041bc0fae
commit fc728f27f7
1 changed files with 9 additions and 4 deletions

View File

@ -197,6 +197,7 @@ class RambleDialog(QDialog):
self.thread_pool = QThreadPool.globalInstance() self.thread_pool = QThreadPool.globalInstance()
self.result: Optional[RambleResult] = None self.result: Optional[RambleResult] = None
self._active_worker: Optional[GenWorker] = None # Keep reference to prevent premature GC
self.field_lock_boxes: Dict[str, QCheckBox] = {} self.field_lock_boxes: Dict[str, QCheckBox] = {}
self.field_outputs: Dict[str, QTextEdit] = {} self.field_outputs: Dict[str, QTextEdit] = {}
@ -373,10 +374,10 @@ class RambleDialog(QDialog):
} }
self._set_busy(True, "Generating...") self._set_busy(True, "Generating...")
worker = GenWorker(self.provider, payload) self._active_worker = GenWorker(self.provider, payload)
worker.signals.finished.connect(self._on_generated) self._active_worker.signals.finished.connect(self._on_generated)
worker.signals.error.connect(self._on_gen_error) self._active_worker.signals.error.connect(self._on_gen_error)
self.thread_pool.start(worker) self.thread_pool.start(self._active_worker)
def _on_generated(self, data: Dict[str, Any]): def _on_generated(self, data: Dict[str, Any]):
new_fields: Dict[str, str] = data.get("fields", {}) new_fields: Dict[str, str] = data.get("fields", {})
@ -431,6 +432,10 @@ class RambleDialog(QDialog):
def closeEvent(self, event): def closeEvent(self, event):
"""Wait for background workers to finish before closing.""" """Wait for background workers to finish before closing."""
self.thread_pool.waitForDone(1000) # Wait up to 1 second self.thread_pool.waitForDone(1000) # Wait up to 1 second
# Clean up worker reference to prevent Qt warning
if self._active_worker is not None:
self._active_worker.signals.deleteLater()
self._active_worker = None
super().closeEvent(event) super().closeEvent(event)