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
Forum Updated to NodeBB v4.3 + New Features

QWebEngineView makes window flicker while moving it

Scheduled Pinned Locked Moved Unsolved QtWebEngine
1 Posts 1 Posters 367 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