0

この小さなブラウザ アプリが、モーダル ウィンドウで指定された window.returnValue を返せないのはなぜですか? Qt Browser デモでは機能しますが、なぜ機能し、このミニ ブラウザー アプリは機能しないのかわかりません。

#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();
}

showModalDialog()は同期的であり、呼び出しによって作成されたモーダル ダイアログで window.returnValue として設定された値を返す必要があります。小さなブラウザー アプリはダイアログ ウィンドウを正常に開きますが、(モーダル)window.returnValue が showModalDialog() の戻り値として設定されていません。

4

2 に答える 2

1

Webページのコンストラクターに次を追加します。

connect(this, SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested()));

そしてスロットを追加します

void WebPage::windowCloseRequested()
{
    this->view()->close();
}
于 2012-11-08T15:18:21.320 に答える
0

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"
于 2012-09-03T13:49:56.703 に答える