Qt 如何使QWebView保留模式窗口的返回值?

Qt 如何使QWebView保留模式窗口的返回值?,qt,qtwebkit,Qt,Qtwebkit,是什么导致此小型浏览器应用程序无法返回窗口。返回模式窗口中给定的值?这个应用程序确实可以工作,但我不明白为什么它可以工作,而这个迷你浏览器应用程序不能工作 #include <QApplication> #include <QWebView> #include <QWebPage> #include <QUrl> class WebPage : public QWebPage { public: QWebPage *createWindo

是什么导致此小型浏览器应用程序无法返回窗口。返回模式窗口中给定的值?这个应用程序确实可以工作,但我不明白为什么它可以工作,而这个迷你浏览器应用程序不能工作

#include <QApplication>
#include <QWebView>
#include <QWebPage>
#include <QUrl>

class WebPage : public QWebPage
{
public:
    QWebPage *createWindow(QWebPage::WebWindowType type)
    {
        QWebView *wv = new QWebView;
        if (type == QWebPage::WebModalDialog)
            wv->setWindowModality(Qt::ApplicationModal);
        return wv->page();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWebView view;

    QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);

    view.setPage(new WebPage);
    view.load(QUrl("http://help.dottoro.com/external/examples/ljdlgxbu/showModalDialog_1.htm"));
    view.show();

    return a.exec();
}
#包括
#包括
#包括
#包括
班级网页:公共QQ网页
{
公众:
QWebPage*createWindow(QWebPage::WebWindowType类型)
{
QWebView*wv=新的QWebView;
如果(类型==QWebPage::WebModalDialog)
wv->SetWindowModal(Qt::ApplicationModel);
返回wv->page();
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QWebView视图;
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled,true);
view.setPage(新网页);
查看。加载(QUrl(“http://help.dottoro.com/external/examples/ljdlgxbu/showModalDialog_1.htm"));
view.show();
返回a.exec();
}

是同步的,应在调用创建的模式对话框中返回设置为window.returnValue的值。小型浏览器应用程序成功打开对话框窗口,但(模式)window.returnValue未设置为showModalDialog()的返回值。

似乎windowCloseRequested()信号未正确处理。此示例将非常有效:

#include <QApplication>
#include <QWebView>
#include <QWebPage>
#include <QUrl>

class WebView : public QWebView
{
    Q_OBJECT
public:
    WebView(QWidget *parent = 0);
};

class WebPage : public QWebPage
{
    Q_OBJECT
public:
    WebPage(QObject *parent = 0) : QWebPage(parent) {
    }

    virtual QWebPage *createWindow(QWebPage::WebWindowType)
    {
        QWebView *view = new WebView();

        return view->page();
    }
};

WebView::WebView(QWidget *parent) : QWebView(parent) {
    setPage(new WebPage(this));
    connect(this->page(), SIGNAL(windowCloseRequested()), this, SLOT(deleteLater()));
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    WebView view;

    QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
    view.load(QUrl("http://help.dottoro.com/external/examples/ljdlgxbu/showModalDialog_1.htm"));
    view.show();

    return a.exec();
}

#include "main.moc"
#包括
#包括
#包括
#包括
类WebView:publicqwebview
{
Q_对象
公众:
WebView(QWidget*parent=0);
};
班级网页:公共QQ网页
{
Q_对象
公众:
网页(QObject*parent=0):QWebPage(parent){
}
虚拟QWebPage*createWindow(QWebPage::WebWindowType)
{
QWebView*视图=新建WebView();
返回视图->页面();
}
};
WebView::WebView(QWidget*parent):QWebView(parent){
setPage(新网页(本));
连接(此->页面(),信号(windowCloseRequested()),此,插槽(deleteLater());
}
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
网络视图;
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled,true);
查看。加载(QUrl(“http://help.dottoro.com/external/examples/ljdlgxbu/showModalDialog_1.htm"));
view.show();
返回a.exec();
}
#包括“main.moc”

在您网页的构造函数中添加:

connect(this, SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested()));
并添加插槽

void WebPage::windowCloseRequested()
{
    this->view()->close();
}

请看我自己的答案。您只需将windowCloseRequest()信号连接到deleteLater()插槽。