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

PyQt5技术问询:QTableView鼠标移入项时在QStatusBar显示数据,移出时隐藏

QTableView鼠标移入移出项时的状态栏显示实现方案

不需要继承QTableView,通过鼠标追踪+事件过滤器结合entered信号就能实现需求,具体步骤如下:

  1. 开启QTableView的鼠标追踪
    默认情况下QTableView仅在鼠标按下时追踪位置,开启后可捕获所有鼠标移动事件:
tableView->setMouseTracking(true);
  1. 连接entered信号处理移入逻辑
    当鼠标移入有效项时,提取数据并显示到状态栏:
connect(tableView, &QTableView::entered, this, [this](const QModelIndex& index) {
    if (index.isValid()) {
        QString itemData = index.data(Qt::DisplayRole).toString();
        statusBar()->showMessage(itemData);
    }
});
  1. 安装事件过滤器处理移出场景
    通过事件过滤器监听两种移出情况:鼠标完全离开表格、鼠标在表格内但移到项之外的空白区域:
bool YourMainWindow::eventFilter(QObject* watched, QEvent* event) {
    if (watched == tableView) {
        if (event->type() == QEvent::Leave) {
            // 鼠标移出表格,清空状态栏
            statusBar()->clearMessage();
        } else if (event->type() == QEvent::MouseMove) {
            QMouseEvent* mouseEvt = static_cast<QMouseEvent*>(event);
            QModelIndex currentIndex = tableView->indexAt(mouseEvt->pos());
            if (!currentIndex.isValid()) {
                // 鼠标在表格内但未指向任何项,清空状态栏
                statusBar()->clearMessage();
            }
        }
    }
    return QMainWindow::eventFilter(watched, event);
}

记得在构造函数中给tableView安装过滤器:

tableView->installEventFilter(this);

说明

这种方案无需自定义QTableView子类,通过Qt的事件机制即可完整覆盖所有场景:

  • 鼠标移入有效项:触发entered信号显示数据
  • 鼠标移出项到表格空白区:通过MouseMove事件检测无效索引,清空状态栏
  • 鼠标完全离开表格:通过Leave事件清空状态栏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:36:17