2

mouseMoveEvent发现我QWebView重新启动了屏幕保护程序的计时器。问题是现在没有mouseMoveEvent分配给 HTML 元素,因此不可能例如在页面上移动滑动条。

我使用 connect 绑定mouseMoveEvent到重启槽:

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

网络视图类:

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 页面?

4

2 回答 2

2

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

像这样:

MyWebView::mouseMoveEvent(QMouseEvent * e) {
   emit mouseMoved(); // this would be signal you could connect to.
}
于 2015-12-10T10:42:21.187 回答
2

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

mouseMoveEvent是 QWidget 的成员方法,不是信号,因此您无法连接到它。您可以在子类中覆盖它并发出您自己的信号。

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

于 2015-12-10T11:01:16.733 回答