gpt4 book ai didi

c++ - Qt。忽略另一个小部件中的任何鼠标事件

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:38 25 4
gpt4 key购买 nike

我有一个 QTableView,如果鼠标悬停在事件单元格上,就会出现一个小标记。这个标记是一个小部件,如果悬停会发出信号,当我在表格上拖动时会更改表格的选择模式。问题是,如果我越界了,我就不能拖过 table 。我尝试过的事情:

  • setWindowFlags(Qt::WindowTransparentForInput); 一样设置小部件标记,但我不能使用它,因为我需要悬停事件。
  • 使用 event->ignore() 忽略小部件标记中的事件,或者使用 eventFilter 将事件发送给父级:

    bool EventFilterMarca::eventFilter(QObject *obj, QEvent *event)
    {
    if( event->type() == QEvent::HoverMove)
    {
    ....
    }
    else if (event->type() == QEvent::MouseButtonPress ||
    event->type() == QEvent::MouseButtonRelease ||
    event->type() == QEvent::MouseMove ||
    event->type() == QEvent::MouseButtonDblClick)
    {
    //QApplication::sendEvent(parent(),event);//one try
    //event->ignore();//another try
    return QObject::eventFilter(obj,event);;
    }
    }
  • 在标记小部件中子类化 mousePressEventmouseReleaseEventmouseMoveEvent 并调用父类。看起来如果它在表的当前单元格(父级)中有效(将事件传递给父级):

void Marca::mousePressEvent(QMouseEvent *event)

{
//event->setAccepted(false);
if(event->buttons() == Qt::LeftButton)
{
MiTabla* tabla = qobject_cast<MiTabla*>(parent());
if (tabla)
{
tabla->mousePressEvent(event);
//QApplication::sendEvent(parent(),event);
}
}
//event->ignore();
}

好吧,问题是如果我在单元格的小部件上或直接在单元格上,如何让表格的行为相同。

此外,我还添加了一个链接,其中包含我的第一种获取方法。它可以工作,但是代码很糟糕而且不容易理解:

https://github.com/exodehm/tablacalc

最佳答案

我认为事件过滤器不是你想要的。这就是使小部件无法接收特定事件的原因。您真正想要做的是将事件标记为由特定小部件未处理,将其放在类中更高的位置以进行处理。为此,您应该尝试重新实现 widgets::event 方法或更具体的处理程序。

在 qt 文档中说:

bool QWidget::event(QEvent *event)

This function returns true if the event was recognized, otherwise it returns false. If the recognized event was accepted (see QEvent::accepted), any further processing such as event propagation to the parent widget stops.

所以我认为您应该做的基本上是在您的小部件发生您想要传播到父小部件的特定事件类型时将事件标记为未接受。

所以在你的情况下,我希望是这样的:

void QWidget::dropEvent(QDropEvent *event) {
event->setAccepted(false);
}

此外,为了使其正常工作,您的表需要成为标记小部件的父小部件。

关于c++ - Qt。忽略另一个小部件中的任何鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56501012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com