Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript QWebEngineView在自动滚动网页时冻结 我用C++和qt v5.91._Javascript_C++_Qt_Loops_Qtwebengine - Fatal编程技术网

Javascript QWebEngineView在自动滚动网页时冻结 我用C++和qt v5.91.

Javascript QWebEngineView在自动滚动网页时冻结 我用C++和qt v5.91.,javascript,c++,qt,loops,qtwebengine,Javascript,C++,Qt,Loops,Qtwebengine,我在使用QWebEngineView时遇到了一个问题。它在自动扫描中冻结,然后解冻,并在自动扫描完成后恢复正常 冻结: void主窗口::在加载时单击() { QUrl url=QUrl(ui->lineEdit->text()); webview->page()->加载(url); 连接(webview->page(),&QWebEnginePage::loadFinished,this,&MainWindow::on_PageLoadFinished); } void main windo

我在使用QWebEngineView时遇到了一个问题。它在自动扫描中冻结,然后解冻,并在自动扫描完成后恢复正常


冻结:
void主窗口::在加载时单击()
{
QUrl url=QUrl(ui->lineEdit->text());
webview->page()->加载(url);
连接(webview->page(),&QWebEnginePage::loadFinished,this,&MainWindow::on_PageLoadFinished);
}
void main window::on_PageLoadFinished()
{
断开连接(webview->page(),&QWebEnginePage::loadFinished,this,&MainWindow::on_PageLoadFinished);
//获取页面的高度
webview->page()->runJavaScript(“document.body.scrollHeight”[&](constqvariant&result){set_PageHeight(result.toInt());});
}
void主窗口::设置页面高度(内部高度)
{
页面高度=高度;
滚动下载页();
}
void MainWindow::ScrollDownPage()
{
当前垂直滚动=0;
while(当前垂直滚动页面()->运行JavaScript(QString(“window.scrollTo(0,%1);”)).arg(当前垂直滚动));
当前垂直滚动+=100;
QEventLoop循环;
QTimer t;
t、 连接(&t,&QTimer::timeout,&loop,&QEventLoop::quit);
t、 启动(30);
loop.exec();
qApp->processEvents();
}
}

有效: 但是,当我手动单击调用相同的自动滚动功能的按钮时,这个问题不会出现

    void MainWindow::on_BTN_Load_clicked()
    {
        QUrl url = QUrl(ui->lineEdit->text());
        webview->page()->load(url);
        connect(webview->page(), &QWebEnginePage::loadFinished, this, &MainWindow::on_PageLoadFinished);
    }
    
    void MainWindow::on_PageLoadFinished()
    {
        disconnect(webview->page(), &QWebEnginePage::loadFinished, this, &MainWindow::on_PageLoadFinished);
        
        //Get the page's height
        webview->page()->runJavaScript("document.body.scrollHeight",[&](const QVariant &result) {set_PageHeight(result.toInt());});
    }
    
    void MainWindow::set_PageHeight(int TheHeight)
    {
        ThePageHeight = TheHeight;
        // ScrollDownPage();     //I disable this now
    }
    
    void MainWindow::ScrollDownPage()
    {
        TheCurrentVerticalScroll = 0;
    
        while (TheCurrentVerticalScroll <= ThePageHeight)
        {
            webview->page()->runJavaScript(QString("window.scrollTo(0, %1);").arg(TheCurrentVerticalScroll));
            TheCurrentVerticalScroll += 100;
            
            QEventLoop loop;
            QTimer t;
            t.connect(&t, &QTimer::timeout, &loop, &QEventLoop::quit);
            t.start(30);
            loop.exec();
            qApp->processEvents();
        }
    }
    
   //I add this:
    void MainWindow::on_BTN_Scroll_clicked()
    {
        ScrollDownPage();
    }
void主窗口::在加载时单击()
{
QUrl url=QUrl(ui->lineEdit->text());
webview->page()->加载(url);
连接(webview->page(),&QWebEnginePage::loadFinished,this,&MainWindow::on_PageLoadFinished);
}
void main window::on_PageLoadFinished()
{
断开连接(webview->page(),&QWebEnginePage::loadFinished,this,&MainWindow::on_PageLoadFinished);
//获取页面的高度
webview->page()->runJavaScript(“document.body.scrollHeight”[&](constqvariant&result){set_PageHeight(result.toInt());});
}
void主窗口::设置页面高度(内部高度)
{
页面高度=高度;
//ScrollDownPage();//我现在禁用它
}
void MainWindow::ScrollDownPage()
{
当前垂直滚动=0;
while(当前垂直滚动页面()->运行JavaScript(QString(“window.scrollTo(0,%1);”)).arg(当前垂直滚动));
当前垂直滚动+=100;
QEventLoop循环;
QTimer t;
t、 连接(&t,&QTimer::timeout,&loop,&QEventLoop::quit);
t、 启动(30);
loop.exec();
qApp->processEvents();
}
}
//我补充说:
void主窗口::在\u BTN\u滚动\u单击()时
{
滚动下载页();
}

我想要什么: 我想自动滚动网页,而不是通过单击按钮手动滚动


谢谢。

我测试过的代码表明它不起作用,我没有遇到问题,我用Qt 5.9.1在Linux中测试过它,也许错误在别处,你可以共享完整的代码来测试它。@eyllanesc这些是完整的代码。我在Linux mint 18.2下也使用过它。也许你试图加载一个小页面,所以自动滚动t在观察到问题之前快速进入页面末尾(冻结)。@EylanEsc这是一个很大的页面,例如:我尝试了链接,但没有问题。@EylanEsc调用此函数后是否可以直接重新检查发生的情况:ScrollDownPage();
    void MainWindow::on_BTN_Load_clicked()
    {
        QUrl url = QUrl(ui->lineEdit->text());
        webview->page()->load(url);
        connect(webview->page(), &QWebEnginePage::loadFinished, this, &MainWindow::on_PageLoadFinished);
    }
    
    void MainWindow::on_PageLoadFinished()
    {
        disconnect(webview->page(), &QWebEnginePage::loadFinished, this, &MainWindow::on_PageLoadFinished);
        
        //Get the page's height
        webview->page()->runJavaScript("document.body.scrollHeight",[&](const QVariant &result) {set_PageHeight(result.toInt());});
    }
    
    void MainWindow::set_PageHeight(int TheHeight)
    {
        ThePageHeight = TheHeight;
        // ScrollDownPage();     //I disable this now
    }
    
    void MainWindow::ScrollDownPage()
    {
        TheCurrentVerticalScroll = 0;
    
        while (TheCurrentVerticalScroll <= ThePageHeight)
        {
            webview->page()->runJavaScript(QString("window.scrollTo(0, %1);").arg(TheCurrentVerticalScroll));
            TheCurrentVerticalScroll += 100;
            
            QEventLoop loop;
            QTimer t;
            t.connect(&t, &QTimer::timeout, &loop, &QEventLoop::quit);
            t.start(30);
            loop.exec();
            qApp->processEvents();
        }
    }
    
   //I add this:
    void MainWindow::on_BTN_Scroll_clicked()
    {
        ScrollDownPage();
    }