You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中setWhatsThis提示文本点击即消失无法选中复制该怎么解决?

问题原因

Qt 原生 QWhatsThis 弹窗的默认交互逻辑为:点击任意位置(包括弹窗内部区域)就会自动关闭,因此不支持直接选中、复制弹窗内的文本。

解决方案

方案1:通过事件过滤器修改默认关闭逻辑

全局安装事件过滤器,仅当用户点击弹窗外部时才关闭WhatsThis弹窗,保留弹窗内部的选中、交互权限:

from PyQt5.QtCore import QEvent, QObject
from PyQt5.QtWidgets import QApplication, QWhatsThis

class WhatsThisFilter(QObject):
    def eventFilter(self, obj, event):
        if event.type() == QEvent.MouseButtonPress and isinstance(obj, QWhatsThis):
            # 点击位置在弹窗内部时,拦截事件不触发关闭
            if obj.rect().contains(event.pos()):
                return True
        return super().eventFilter(obj, event)

# 在应用初始化阶段注册过滤器
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    # 注册过滤器
    filter_obj = WhatsThisFilter()
    app.installEventFilter(filter_obj)
    # 后续正常初始化你的窗口、调用setWhatsThis即可

方案2:替换为自定义可交互提示弹窗

如果需要更丰富的交互能力(比如支持富文本渲染、添加一键复制按钮),可以完全弃用原生QWhatsThis,自定义弹窗实现相同功能:

from PyQt5.QtWidgets import QDialog, QVBoxLayout, QTextEdit, QPushButton

def show_custom_tip(parent, tip_text):
    dialog = QDialog(parent)
    dialog.setWindowTitle("提示信息")
    dialog.resize(400, 300)
    
    layout = QVBoxLayout(dialog)
    # 只读QTextEdit原生支持文本选中、右键复制
    text_area = QTextEdit()
    text_area.setReadOnly(True)
    text_area.setText(tip_text)
    layout.addWidget(text_area)
    
    close_btn = QPushButton("关闭")
    close_btn.clicked.connect(dialog.close)
    layout.addWidget(close_btn)
    
    dialog.exec_()

# 原调用setWhatsThis的位置,改为绑定点击事件触发show_custom_tip方法即可

内容的提问来源于stack exchange,提问作者Flamingo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:24:04