【Qt一骚操作】Qt 鼠标悬停在某一控件上时,悬浮显示提示内容

前言:

现在有一个需求,就是在Qt 表格界面中,鼠标悬停在某行某列的单元格上,能够显示单元格内容的全部信息(tip)

一、针对这个需求要考虑用鼠标事件来触发

先设置鼠标追踪如下:

QTableView m_tableView = new QTableView(this); 
m_tableView->setMouseTracking(true); // 设置鼠标追踪
connect(m_tableView, &DTableView::entered, this, &SecurityLogDialog::doMouseTrackTip)

槽方法:

void SecurityLogDialog::doMouseTrackTip(QModelIndex index)
{
    QToolTip::showText(QCursor::pos(), index.data().toString());
}

二、其他知识点:

(1)QModelIndex类 用于定位数据模型中的数据。

Header: #include  "QModelIndex"

qmake: QT+=core

此类用作从QAbstractItemModel派生的项模型的索引。 项目视图,代理和选择模型使用索引来定位模型中的项目。

新的QModelIndex对象是用QAbstractItemModel::createIndex()来生成,一个无效的索引能用QModelIndex构造,这类无效的索引经常被用于更高层次的父类索引

在model里面的Modelindexes,包含了所有需要确认它位置的信息。我们可以用row(),column(),parent()去获取它的行、列、和parent信息

Model index在生成之后要立即使用,他会在使用之后被discarded,如果想要一直使用某个Model Index,可以考虑使用QPersistentModelIndex

相关参考:

链接1.https://blog.csdn.net/zhouzhouasishuijiao/article/details/84331268

链接2.https://www.jianshu.com/p/f79a2feca5a1 (Python)

(2)控件的toolTip 设置提示悬浮

  • **概念:**控件的toolTip用来给控件进行注释等信息
  • 当为控件设置了toolTip之后,鼠标停留在控件上时就会显示toolTip的信息

调用setToolTip()为控件设置toolTip

void setToolTip(const QString &)
// 例如:
QPushButton *show =new QPushButton();
show->setToolTip("Hello Word")

如图所示:

【Qt一骚操作】Qt 鼠标悬停在某一控件上时,悬浮显示提示内容_第1张图片

相关参考:

链接1:https://blog.csdn.net/qq_41453285/article/details/100035965

(3)setMouseTracking(true) 对鼠标进行监控

目的:

1、要想实现mouseMoveEvent,则需要在构造函数中添加setMouseTrack(true),直接得到监听事件。若是setMouseTrack(false),只有鼠标按下才会有mouseMove监听事件响应。

2、使用setMouseTracking(true)对鼠标进行监控(mouseMoveEvent(QMouseEvent *event)),如果WidgetA有个子窗体WidgetB会占据WidgetA的绝大部分空间,那么当鼠标移动到WidgetB上时,WidgetA就会失去对鼠标的监控。

3、使用setAttribute (Qt::WA_Hover,true)也可以实现对鼠标的监控,相对于setMouseTracking(true)来说,它可以弥补鼠标事件被子窗体获取的问题(这个还没验证):

bool Widget::event(QEvent *e)
{
    if (e->type() == QEvent::HoverEnter || e->type() == QEvent::HoverLeave
        || e->type() == QEvent::HoverMove)
    {
        QHoverEvent* pHoverEvent = static_cast(e);
        setMouseStatus(pHoverEvent->pos());
    }
    return QWidget::event(e);
}

相关参考:

链接1:https://blog.csdn.net/hebbely/article/details/52188904

你可能感兴趣的:(Qt,qt,python)