Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Cccr от Октябрь 15, 2010, 21:22



Название: setHtml Qt 4.7.0
Отправлено: Cccr от Октябрь 15, 2010, 21:22
Привет всем!
Извините если поднимаю вопрос повторно, не нашел нужный тред.

udp:
ЕСТЬ КОД:

#include "formextractor.h"
#include <QWebElement>
FormExtractor::FormExtractor(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
    ui.webView->setUrl(QUrl("qrc:/form.html"));

    connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
            this, SLOT(populateJavaScriptWindowObject()));
    resize(300, 300);
}

FormExtractor::~FormExtractor()
{
}

void FormExtractor::submit()
{
    exit(1);
}

void FormExtractor::populateJavaScriptWindowObject()
{
    ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);
}

/form.html содержит

Method 1 НЕ ВЫЗЫВАЕТ СЛОТ
<FORM>
<INPUT TYPE="button" VALUE="Click Here to Write to Me"
onClick="FormExtractor.submit()">
</FORM>

Method 2
<form onsubmit="formExtractor.submit()"><input type="submit" value="Submit"></form>

первый случай слот submit не вызывает, второй работает нормально.

Скажите плз в чем причина, почему в первом случае слот не вызывается?

ps: код - это пример, чтобы пояснить проблему.


Название: Re: setHtml Qt 4.7.0
Отправлено: marbius от Октябрь 16, 2010, 03:53
void FormExtractor::populateJavaScriptWindowObject()
{
    ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);
}

/form.html содержит

Method 1 НЕ ВЫЗЫВАЕТ СЛОТ
<FORM>
<INPUT TYPE="button" VALUE="Click Here to Write to Me"
onClick="FormExtractor.submit()">
</FORM>

Method 2
<form onsubmit="formExtractor.submit()"><input type="submit" value="Submit"></form>


formExtractor и FormExtractor - разные объекты


Название: Re: setHtml Qt 4.7.0
Отправлено: Cccr от Октябрь 16, 2010, 08:33
код поменял устанавливаю рабочий код через ui.webView->setUrl(QUrl("qrc:/form.html"));
все работает СПАСИБО за то что заметили ошибку.

но вот проблема остается с setHtml

QString Html = "<FORM><INPUT TYPE=\"button\" VALUE=\"Click Here\" onClick=\"formExtractor.submit()\"></FORM>";
   
ui.webView->setHtml(Html);

и слот не вызывается.



Название: Re: setHtml Qt 4.7.0
Отправлено: marbius от Октябрь 16, 2010, 10:23
Вызывайте QWebView::setHtml после того, как присоединили сигнал javaScriptWindowObjectCleared.

Делайте так:
Код
C++ (Qt)
connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject()));
 
QString Html = "<FORM><INPUT TYPE='button' VALUE='Click Here' onClick='formExtractor.submit()'></FORM>";
ui->webView->setHtml(Html);
 

А не так:
Код
C++ (Qt)
QString Html = "<FORM><INPUT TYPE='button' VALUE='Click Here' onClick='formExtractor.submit()'></FORM>";
ui->webView->setHtml(Html);
 
connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject()));
 

Должно заработать.


Название: Re: setHtml Qt 4.7.0
Отправлено: Cccr от Октябрь 16, 2010, 11:11
СПАСИБО ОГРОМНОЕ!))

но все таки странно что в новой версии (4.7.0) так надо делать, в старых работало и так=)))