Qt:捕获 mouseMoveEvent 不与 WebView html 页面元素交互

Qt : catched mouseMoseEvent dont interact with QWebView html page element

我赶上 QWebViewmouseMoveEvent 以重新启动屏幕保护程序的计时器。问题是现在 mouseMoveEvent 未分配给 HTML 元素,因此无法在页面上移动滑动条。

我使用连接将 mouseMoveEvent 绑定到重启插槽 :

QObject::connect(_view, SIGNAL(mouseMoveEvent(QMouseEvent*)), _mediaPlayer, SLOT(stop()));

网络视图 class :

class WebView : public QWebView
{
    Q_OBJECT
public:

    WebView(QString menu) : _menuDesc(menu) {};
    WebView(){};

    void            setMenuDesc(QString menu) {_menuDesc = menu;};
    QString         getMenuDesc() {return _menuDesc;};
    void            setCurrPage(QString page) {_currPage = page;};
    QString         getCurrPage() {return _currPage;};
    void            setCurrCategory(QString page) {_currPage = page;};
    QString         getCurrCategory() {return _currPage;};

    void            mouseMoveEvent(QMouseEvent *)
    {
        emit mouseMoved();
    };

signals :
    void mouseMoved();

private:

    QString             _menuDesc = 0;
    QString             _currPage;
    QString             _currCategory = 0;
};

是否有仍然捕获信号并将其传递到 HTML 页面的解决方案?

mouseMoveEvent 不是信号而是事件处理程序。您可以重新实现此事件处理程序,并让它发出一个信号,您可以在需要时连接到它。

像这样:

MyWebView::mouseMoveEvent(QMouseEvent * e) {
   emit mouseMoved(); // this would be signal you could connect to.
}

您似乎误解了事件处理程序和信号的用法。

mouseMoveEvent是QWidget的一个成员方法,不是一个信号所以你不能连接它。你可以在你的子类中覆盖它并发出你自己的信号。

并且如果 QWidget 的鼠标跟踪被关闭,则只有在鼠标移动时按下鼠标按钮时才会发生鼠标移动事件。也许您还需要调用 setMouseTracking