mirror of
https://github.com/Minidoracat/mcp-feedback-enhanced.git
synced 2025-07-27 10:42:25 +08:00
🐛 修復GUI重複貼上圖片的問題
This commit is contained in:
parent
30f8c2c1a3
commit
5f6e8d1eef
@ -17,7 +17,6 @@ from ..window.config_manager import ConfigManager
|
|||||||
|
|
||||||
class FeedbackTab(QWidget):
|
class FeedbackTab(QWidget):
|
||||||
"""回饋分頁組件"""
|
"""回饋分頁組件"""
|
||||||
image_paste_requested = Signal()
|
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -80,6 +79,17 @@ class FeedbackTab(QWidget):
|
|||||||
}
|
}
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# 創建圖片上傳區域(需要先創建以便連接信號)
|
||||||
|
image_upload_widget = QWidget()
|
||||||
|
image_upload_widget.setMinimumHeight(200) # 進一步增加最小高度
|
||||||
|
image_upload_widget.setMaximumHeight(320) # 增加最大高度
|
||||||
|
image_upload_layout = QVBoxLayout(image_upload_widget)
|
||||||
|
image_upload_layout.setSpacing(8)
|
||||||
|
image_upload_layout.setContentsMargins(0, 8, 0, 0) # 與回饋輸入區域保持一致的邊距
|
||||||
|
|
||||||
|
self.image_upload = ImageUploadWidget(config_manager=self.config_manager)
|
||||||
|
image_upload_layout.addWidget(self.image_upload, 1)
|
||||||
|
|
||||||
# 回饋輸入區域
|
# 回饋輸入區域
|
||||||
self.feedback_input = SmartTextEdit()
|
self.feedback_input = SmartTextEdit()
|
||||||
placeholder_text = t('feedback.placeholder').replace("Ctrl+Enter", "Ctrl+Enter/Cmd+Enter").replace("Ctrl+V", "Ctrl+V/Cmd+V")
|
placeholder_text = t('feedback.placeholder').replace("Ctrl+Enter", "Ctrl+Enter/Cmd+Enter").replace("Ctrl+V", "Ctrl+V/Cmd+V")
|
||||||
@ -96,18 +106,8 @@ class FeedbackTab(QWidget):
|
|||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
""")
|
""")
|
||||||
self.feedback_input.image_paste_requested.connect(self.image_paste_requested)
|
# 直接連接文字輸入框的圖片貼上信號到圖片上傳組件
|
||||||
|
self.feedback_input.image_paste_requested.connect(self.image_upload.paste_from_clipboard)
|
||||||
# 圖片上傳區域(確保固定高度和滾動支持)
|
|
||||||
image_upload_widget = QWidget()
|
|
||||||
image_upload_widget.setMinimumHeight(200) # 進一步增加最小高度
|
|
||||||
image_upload_widget.setMaximumHeight(320) # 增加最大高度
|
|
||||||
image_upload_layout = QVBoxLayout(image_upload_widget)
|
|
||||||
image_upload_layout.setSpacing(8)
|
|
||||||
image_upload_layout.setContentsMargins(0, 8, 0, 0) # 與回饋輸入區域保持一致的邊距
|
|
||||||
|
|
||||||
self.image_upload = ImageUploadWidget(config_manager=self.config_manager)
|
|
||||||
image_upload_layout.addWidget(self.image_upload, 1)
|
|
||||||
|
|
||||||
# 添加到分割器
|
# 添加到分割器
|
||||||
feedback_splitter.addWidget(self.feedback_input)
|
feedback_splitter.addWidget(self.feedback_input)
|
||||||
@ -161,10 +161,6 @@ class FeedbackTab(QWidget):
|
|||||||
|
|
||||||
if hasattr(self, 'image_upload'):
|
if hasattr(self, 'image_upload'):
|
||||||
self.image_upload.update_texts()
|
self.image_upload.update_texts()
|
||||||
|
|
||||||
def handle_image_paste_from_textarea(self) -> None:
|
|
||||||
"""處理從文字框智能貼上圖片的功能"""
|
|
||||||
self.image_upload.paste_from_clipboard()
|
|
||||||
|
|
||||||
def _save_feedback_splitter_position(self, splitter: QSplitter) -> None:
|
def _save_feedback_splitter_position(self, splitter: QSplitter) -> None:
|
||||||
"""保存分割器的位置"""
|
"""保存分割器的位置"""
|
||||||
|
@ -36,6 +36,7 @@ class ImageUploadWidget(QWidget):
|
|||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.images: Dict[str, Dict[str, str]] = {}
|
self.images: Dict[str, Dict[str, str]] = {}
|
||||||
self.config_manager = config_manager
|
self.config_manager = config_manager
|
||||||
|
self._last_paste_time = 0 # 添加最後貼上時間記錄
|
||||||
self._setup_ui()
|
self._setup_ui()
|
||||||
self.setAcceptDrops(True)
|
self.setAcceptDrops(True)
|
||||||
# 啟動時清理舊的臨時文件
|
# 啟動時清理舊的臨時文件
|
||||||
@ -335,6 +336,14 @@ class ImageUploadWidget(QWidget):
|
|||||||
|
|
||||||
def paste_from_clipboard(self) -> None:
|
def paste_from_clipboard(self) -> None:
|
||||||
"""從剪貼板粘貼圖片"""
|
"""從剪貼板粘貼圖片"""
|
||||||
|
# 防重複保護:檢查是否在短時間內重複調用
|
||||||
|
current_time = time.time() * 1000 # 轉換為毫秒
|
||||||
|
if current_time - self._last_paste_time < 100: # 100毫秒內的重複調用忽略
|
||||||
|
debug_log(f"忽略重複的剪貼板粘貼請求(間隔: {current_time - self._last_paste_time:.1f}ms)")
|
||||||
|
return
|
||||||
|
|
||||||
|
self._last_paste_time = current_time
|
||||||
|
|
||||||
clipboard = QApplication.clipboard()
|
clipboard = QApplication.clipboard()
|
||||||
mimeData = clipboard.mimeData()
|
mimeData = clipboard.mimeData()
|
||||||
|
|
||||||
|
@ -434,10 +434,7 @@ class FeedbackWindow(QMainWindow):
|
|||||||
debug_log(f"佈局變更失敗: {e}")
|
debug_log(f"佈局變更失敗: {e}")
|
||||||
QMessageBox.warning(self, t('errors.title'), t('errors.interfaceReloadError', error=str(e)))
|
QMessageBox.warning(self, t('errors.title'), t('errors.interfaceReloadError', error=str(e)))
|
||||||
|
|
||||||
def _handle_image_paste_from_textarea(self) -> None:
|
|
||||||
"""處理從文字框智能貼上圖片的功能"""
|
|
||||||
if self.tab_manager.feedback_tab:
|
|
||||||
self.tab_manager.feedback_tab.handle_image_paste_from_textarea()
|
|
||||||
|
|
||||||
def _on_reset_settings_requested(self) -> None:
|
def _on_reset_settings_requested(self) -> None:
|
||||||
"""處理重置設定請求"""
|
"""處理重置設定請求"""
|
||||||
|
@ -330,10 +330,7 @@ class TabManager:
|
|||||||
if hasattr(parent, '_on_timeout_settings_changed'):
|
if hasattr(parent, '_on_timeout_settings_changed'):
|
||||||
self.settings_tab.timeout_settings_changed.connect(parent._on_timeout_settings_changed)
|
self.settings_tab.timeout_settings_changed.connect(parent._on_timeout_settings_changed)
|
||||||
|
|
||||||
# 連接回饋分頁的圖片貼上信號
|
# 圖片貼上信號已在 FeedbackTab 內部直接處理,不需要外部連接
|
||||||
if self.feedback_tab:
|
|
||||||
if hasattr(parent, '_handle_image_paste_from_textarea'):
|
|
||||||
self.feedback_tab.image_paste_requested.connect(parent._handle_image_paste_from_textarea)
|
|
||||||
|
|
||||||
def cleanup(self) -> None:
|
def cleanup(self) -> None:
|
||||||
"""清理資源"""
|
"""清理資源"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user