【发布时间】:2015-08-14 11:25:23
【问题描述】:
我扩展了QWebEngineView。
#ifndef MYQWEBENGINEVIEW_H
#define MYQWEBENGINEVIEW_H
#include <QWebEngineView>
class MyQWebEngineView : public QWebEngineView
{
public:
MyQWebEngineView(QWidget *parent = 0);
~MyQWebEngineView();
protected:
virtual void paintEvent(QPaintEvent *);
};
#endif // MYQWEBENGINEVIEW_H
但我无法调用paintEvent(QPaintEvent *)。
#include "myqwebengineview.h"
#include <QPaintEvent>
#include <QPainter>
#include <QWebEngineView>
#include <QWidget>
MyQWebEngineView::MyQWebEngineView(QWidget *parent):QWebEngineView(parent)
{
qDebug() << "MyQWebEngineView(" << parent << ")";
qDebug() << "Qt::WA_PaintOnScreen: " << testAttribute(Qt::WA_PaintOnScreen);
//setAttribute(Qt::WA_PaintOnScreen, true);
}
MyQWebEngineView::~MyQWebEngineView()
{
}
void MyQWebEngineView::paintEvent(QPaintEvent * event)
{
qDebug() << "paintEvent(" << event << ")";
QWebEngineView::paintEvent(event);
//QWidget::paintEvent(event);
qDebug() << event->rect();
qDebug() << event->region();
}
谁能告诉我怎么了?
【问题讨论】:
-
我会深入研究源代码——我不希望 QWebEngine 能够通过正常的
paintEvent机制来绘制自己,因为它的渲染是基于 QtQuick 2(因此是 OpenGL).. . -
QWebEngineView不会重新实现paint。除了使用 OpenGl 覆盖之外,所有光栅集成都可以直接在event中完成。尝试钩住它,看看是否有任何绘画事件即将到来。 -
@KubaOber 你能解释一下
hooking that部分吗? -
@JinKwon 通过挂钩意味着在小部件上安装事件过滤器。然后你会看到你有没有抓到任何
QEvent::Paint -
@KubaOber 我不熟悉 Qt 和 C++。 this 是你要我试试的吗?谢谢。
标签: qt qtwebengine