Unsolved QWebEngineView makes window flicker while moving it
-
im trying to move my QMainWindow by using another widget inside QMainWindow.
Im moving my window by overriding :
void mousePressEvent(QMouseEvent *event) void mouseMoveEvent(QMouseEvent *event)
in a QTabWidget. The window moves well and everything works fine if there is no QWebEngineView widget, but if add the QWebEngineView widget to a layout the movement of the window is laggy, any idea?
here is a minimal reproducible example:
mainwindow.h:
#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:
#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; }
In this code if you delete everything related to QWebEngineView the window will move without lag.
Edit:
this example does the job but , is there a better way to do this?
setUpdatesEnabled(false); //This in mousePressEvent bigVisualChanges(); setUpdatesEnabled(true); //This in mouseReleaseEvent
i dont like this way because for example if im watching a youtube video the image will freeze.