首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWebEngineView导致窗口缓慢移动

QWebEngineView导致窗口缓慢移动
EN

Stack Overflow用户
提问于 2022-08-05 15:22:01
回答 1查看 72关注 0票数 1

我试图通过在QMainWindow中使用另一个小部件来移动我的QMainWindow。

我移动我的窗口通过覆盖:

代码语言:javascript
复制
void mousePressEvent(QMouseEvent *event)
void mouseMoveEvent(QMouseEvent *event)

在QTabWidget中。如果没有QWebEngineView小部件,窗口运行良好,一切正常,但是如果将QWebEngineView小部件添加到布局中,则窗口的移动是滞后的,有什么想法吗?

下面是一个最小的可重现性示例:

mainwindow.h:

代码语言:javascript
复制
#include <QMainWindow>
#include <QMouseEvent>
#include <QtWidgets/QtWidgets>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

class MyTabWidget : public QTabWidget
{
    Q_OBJECT
    public:
    MyTabWidget(QWidget *parent = 0) : QTabWidget(parent){}
    protected:
    void mousePressEvent(QMouseEvent *event) override
    {
        QWidget::mousePressEvent(event);
        pressPoint = event->pos();
    }
    void mouseMoveEvent(QMouseEvent *event) override
    {
        QWidget::mouseMoveEvent(event);
        this->window()->move(this->window()->pos() + (event->pos() - pressPoint) );
    }

    private:
        QPoint pressPoint;
};
#endif // MAINWINDOW_H

mainwindow.cpp:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWebEngineView>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MyTabWidget *tabWidget = new MyTabWidget(this);
    ui->verticalLayout->addWidget(tabWidget);

    QWidget *widget = new QWidget(this);
    QHBoxLayout *hlayout = new QHBoxLayout(this);
    QWebEngineView *view = new QWebEngineView(this);
    widget->setLayout(hlayout);
    hlayout->addWidget(view);


    tabWidget->addTab(widget, "asd");
    view->load(QUrl("https://www.google.com/"));


}

MainWindow::~MainWindow()
{
    delete ui;
}

在这段代码中,如果删除与QWebEngineView相关的所有内容,则窗口将无滞后地移动。

编辑:

这个例子做了这项工作,但是,有没有更好的方法来做到这一点呢?

代码语言:javascript
复制
setUpdatesEnabled(false); //This in mousePressEvent
bigVisualChanges();
setUpdatesEnabled(true); //This in mouseReleaseEvent

我不喜欢这种方式,因为例如,如果我看了youtube视频,图像就会冻结。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-08 14:28:45

尝试以这种方式重新实现您的mousePressEventmouseMoveEvent,使用globalPosition()而不是pos()。为我工作过。窗户开始平稳地移动。

代码语言:javascript
复制
void mousePressEvent(QMouseEvent *event) override
{
    pressPoint = event->globalPosition().toPoint();
    QWidget::mousePressEvent(event);
}
void mouseMoveEvent(QMouseEvent *event) override
{
    QPoint delta = event->globalPosition().toPoint() - pressPoint;
    this->window()->move(this->window()->pos() + delta );
    pressPoint = event->globalPosition().toPoint();
    QWidget::mouseMoveEvent(event);
}

更新:为了获得更好的web引擎性能(页面加载、视频播放和网页动画),构建在版本中的配置。

Update2:测试显示https://youtu.be/QM3UXjipr8Q

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73252000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档