Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QtWebEngine
  4. QWebEngineView makes window flicker while moving it

QWebEngineView makes window flicker while moving it

Scheduled Pinned Locked Moved Unsolved QtWebEngine
1 Posts 1 Posters 473 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    Franco1274
    wrote on last edited by Franco1274
    #1

    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.

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved