PyQt学习笔记:使用QtWidgets.qApp实现在程序中随时访问应用的方法

176 篇文章 ¥59.90 ¥99.00
本文介绍了在PyQt中如何使用QtWidgets.qApp全局变量来访问和控制应用程序。通过示例代码,展示了如何创建窗口,设置按钮,以及在按钮点击时调用qApp.quit()退出应用。利用qApp,开发者可以方便地进行应用级别的操作,如设置应用图标等。

PyQt学习笔记:使用QtWidgets.qApp实现在程序中随时访问应用的方法

在PyQt中,QtWidgets.qApp是一个全局变量,它提供了一种在程序中随时访问应用的方法。通过使用qApp,我们可以轻松地获取到应用的实例,并且可以使用它执行一些应用级别的操作。本文将详细介绍如何使用QtWidgets.qApp来实现这一功能,并提供相应的源代码示例。

首先,我们需要安装PyQt库。可以使用pip命令来安装PyQt5:

pip install PyQt5

安装完成后,我们可以开始编写代码。下面是一个简单的示例,演示了如何使用QtWidgets.qApp来获取应用的实例,并在应用退出时触发一些操作:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

class 
找到的 QTextEdit 数量: 11 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 安装事件过滤器 已为控件 <PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 安装事件过滤器 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:14,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:17,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:26,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:74,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:78,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:24,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:13,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:10,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:11,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:10,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:11,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:10,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:11,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:10,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:11,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:10,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:207,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:8,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:207,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:2,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:9,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:11,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:8,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:12,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:23,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:25,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0> 收到事件:9,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA310> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA550> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA790> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFA9D0> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAC10> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFAE50> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE0D0> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE310> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE550> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE790> 收到事件:18,来自:<PyQt5.QtWidgets.QTextEdit object at 0x000002573BFFE9D0>
最新发布
08-12
从你的日志来看,**事件过滤器已经成功安装到 11 个 `QTextEdit` 控件上**,并且它们都接收到了各种事件(如 13=MouseButtonPress,14=MouseButtonRelease,26=MouseMove 等)。 但你仍然 **没有看到拦截右键菜单事件的日志输出**,这说明: --- ## ❗问题定位:`QEvent.ContextMenu` 事件未被触发或未被正确识别 --- ## ✅ 日志中事件类型含义参考(部分) | 数值 | 事件类型 | 含义 | |------|---------------------------|------| | 2 | `QEvent.Close` | 窗口关闭 | | 8 | `QEvent.Destroy` | 控件销毁 | | 10 | `QEvent.Enter` | 鼠标进入控件 | | 11 | `QEvent.Leave` | 鼠标离控件 | | 12 | `QEvent.FocusIn` / `FocusOut` | 聚焦/失焦 | | 13 | `QEvent.MouseButtonPress` | 鼠标按下 | | 14 | `QEvent.MouseButtonRelease`| 鼠标释放 | | 21 | `QEvent.ContextMenu` | 右键菜单事件 | | 26 | `QEvent.MouseMove` | 鼠标移动 | | 74 | `QEvent.HoverEnter` | 鼠标悬停进入 | | 78 | `QEvent.HoverMove` | 鼠标悬停移动 | | 25 | `QEvent.Paint` | 控件重绘 | --- ## ✅ 你当前的 `eventFilter` 逻辑应该是: ```python def eventFilter(self, obj, event): if isinstance(obj, QTextEdit) and event.type() == QEvent.ContextMenu: print("✅ 拦截到右键菜单事件!") self.show_custom_context_menu(obj, event) return True return super().eventFilter(obj, event) ``` 但是你没有看到 `"✅ 拦截到右键菜单事件!"`,说明: - ❌ 事件未触发; - ❌ 事件被其他控件拦截; - ❌ 事件类型判断错误; - ❌ 控件本身处理了右键事件(比如重写了 `contextMenuEvent`); --- ## ✅ 排查建议 ### ✅ 1. 打印所有事件类型,确认是否收到 `QEvent.ContextMenu`(21) ```python from PyQt5.QtCore import QEvent def eventFilter(self, obj, event): print(f"收到事件:{event.type()},来自:{obj}") if event.type() == QEvent.ContextMenu: print("✅ 拦截到右键菜单事件!") self.show_custom_context_menu(obj, event) return True return super().eventFilter(obj, event) ``` 右键点击任意 `QTextEdit`,观察输出中是否有: ``` 收到事件:21,来自:<PyQt5.QtWidgets.QTextEdit object at 0x...> ✅ 拦截到右键菜单事件! ``` 如果没有看到 `21`,说明事件根本没有触发。 --- ## ✅ 2. 手动发送 `QContextMenuEvent` 测试 ```python from PyQt5.QtCore import QContextMenuEvent from PyQt5.QtGui import QMouseEvent # 假设你有 self.text_edit 是一个 QTextEdit 控件 event = QContextMenuEvent(QContextMenuEvent.Mouse, self.text_edit.rect().center()) QApplication.postEvent(self.text_edit, event) ``` 如果这时你看到了拦截日志,说明: - ✅ 你的 `eventFilter` 是正常的; - ❌ 问题是:系统未自动触发 `QEvent.ContextMenu`。 --- ## ✅ 3. 检查是否子类重写了 `contextMenuEvent` 如果你的 `QTextEdit` 是某个子类的实例,并且该子类重写了 `contextMenuEvent`,那么 `eventFilter` 不会触发。 你可以打印每个控件的类型: ```python for widget in self.findChildren(QTextEdit): print(f"控件类型:{type(widget)}") ``` 如果输出是: ``` 控件类型:<class '__main__.MyCustomTextEdit'> ``` 而不是: ``` 控件类型:<class 'PyQt5.QtWidgets.QTextEdit'> ``` 那么你需要检查这个子类是否重写了 `contextMenuEvent`: ```python class MyCustomTextEdit(QTextEdit): def contextMenuEvent(self, event): pass # 这会阻止 eventFilter 被调用 ``` --- ## ✅ 4. 完整测试代码(确保事件过滤器正常) ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QMenu from PyQt5.QtCore import QEvent, QContextMenuEvent import sys class MyWindow(QMainWindow): def __init__(self): super().__init__() self.text_edit = QTextEdit() self.setCentralWidget(self.text_edit) # 为所有 QTextEdit 安装事件过滤器 for widget in self.findChildren(QTextEdit): widget.installEventFilter(self) print(f"已为控件 {widget} 安装事件过滤器") # 手动发送右键菜单事件 from PyQt5.QtCore import Qt event = QContextMenuEvent(QContextMenuEvent.Mouse, self.text_edit.rect().center()) QApplication.postEvent(self.text_edit, event) def eventFilter(self, obj, event): print(f"收到事件:{event.type()},来自:{obj}") if event.type() == QEvent.ContextMenu: print("✅ 拦截到右键菜单事件!") self.show_custom_context_menu(obj, event) return True return super().eventFilter(obj, event) def show_custom_context_menu(self, text_edit, event): menu = QMenu(self) paste_action = menu.addAction("只粘贴文本") action = menu.exec_(event.globalPos()) if action == paste_action: self.paste_plain_text(text_edit) def paste_plain_text(self, widget): clipboard = QApplication.clipboard() if clipboard.mimeData().hasText(): plain_text = clipboard.text() cursor = widget.textCursor() char_format = widget.currentCharFormat() cursor.insertText(plain_text, char_format) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` --- ## ✅ 总结 | 问题 | 原因 | 解决方法 | |------|------|----------| | 未进入 `eventFilter` 的右键判断 | 事件类型未匹配 | 使用 `QEvent.ContextMenu` | | 控件重写了 `contextMenuEvent` | 事件过滤器不触发 | 检查子类实现 | | 事件未触发 | 系统行为或模拟问题 | 手动发送 `QContextMenuEvent` | | 控件类型不符 | 点击了非 `QTextEdit` | 打印 `type(widget)` 检查 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值