Skip to main content
Glama
QLAYOUT_FIX_COMPLETE.md3.54 kB
# FreeCAD AI Workbench QLayout Error Fix - COMPLETED ✅ ## Problem Fixed **QLayout Error**: "QLayout: Attempting to add QLayout to QWidget which already has a layout" This error was preventing the FreeCAD AI workbench interface from displaying properly after the nuclear minimal initialization was clicked. ## Root Cause The issue was in the layout management when transitioning from the minimal UI to the full UI. The problem occurred in multiple methods: 1. `_setup_full_ui()` method (line ~248) 2. `_setup_ui_safe()` method (line ~543) 3. `_create_fallback_ui()` method (line ~721) The bug was caused by: ```python # WRONG - Creates layout conflict layout = QtWidgets.QVBoxLayout(self.main_widget) # Sets layout immediately ``` This happened because: 1. `old_layout.deleteLater()` schedules deletion but doesn't immediately remove the layout 2. Immediately after, we try to set a new layout on a widget that still has the old layout 3. Qt throws the QLayout error because a widget can only have one layout ## Solution Applied Fixed the layout management in all three methods by: 1. **Proper widget clearing** before layout deletion: ```python # Clear all widgets from old layout while old_layout.count(): child = old_layout.takeAt(0) if child.widget(): child.widget().deleteLater() ``` 2. **Explicit layout removal**: ```python # Process events to ensure widgets are deleted if hasattr(QtWidgets, 'QApplication'): QtWidgets.QApplication.processEvents() # Set layout to None explicitly before deleting self.main_widget.setLayout(None) old_layout.deleteLater() ``` 3. **Safe layout creation**: ```python # Create new layout without parent first, then set it layout = QtWidgets.QVBoxLayout() layout.setSpacing(2) layout.setContentsMargins(2, 2, 2, 2) # Set the layout on the widget self.main_widget.setLayout(layout) ``` ## Files Modified - `/home/jango/Git/mcp-freecad/freecad-ai/gui/main_widget.py` - Fixed `_setup_full_ui()` method - Fixed `_setup_ui_safe()` method - Fixed `_create_fallback_ui()` method ## Test Results ✅ Based on the log file `/tmp/freecad_layout_fix_test.log`: - ✅ **No QLayout errors**: The "QLayout: Attempting to add QLayout" error is completely gone - ✅ **Successful initialization**: "Full initialization completed successfully" - ✅ **UI setup works**: "Setting up full UI..." → "Full UI setup complete" - ✅ **Tabs created**: "Creating full feature tabs..." → "All tabs created successfully" - ✅ **Interface functional**: Multiple "Interface command activated" entries show user interaction works - ✅ **No crashes**: No segmentation faults or crashes detected ## Status: COMPLETED The FreeCAD AI workbench now loads successfully and displays the full interface without QLayout conflicts. Users can: 1. Start with nuclear minimal mode (prevents crashes) 2. Click to initialize full functionality 3. Get complete interface with all tabs (Chat, Agent, Settings, etc.) 4. No layout-related errors or crashes The workbench is now fully functional and stable! ## Previous Issues Fixed As part of the comprehensive fix process, we also resolved: 1. ✅ **Indentation error** (line 1325) - Fixed excessive indentation 2. ✅ **Workbench toolbar creation** - Replaced problematic `_create_toolbar()` method 3. ✅ **Initialization flow** - Fixed `_initialize_full_functionality()` to actually call `_setup_full_ui()` 4. ✅ **QLayout conflicts** - Fixed layout management in UI setup methods All major loading and functionality issues are now resolved.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jango-blockchained/mcp-freecad'

If you have feedback or need assistance with the MCP directory API, please join our Discord server