Как поместить Javascripts для оценки в функцию оценки javascript QWebView

РЕДАКТИРОВАТЬ: слишком много правок :doh:

На этот раз я определил проблему. Есть недостаток в том, как я передаю код Javascript в функцию оценки javascript. из QWebView.

Используя API карт Google, когда я нажимаю кнопку, прикрепленную к слоту, содержащему приведенный ниже код

this->page()->mainFrame()->evaluateJavaScript (QString ("Open(%1,2)").arg ( point.x ()).arg (point.y ()) );

отображается карта, относящаяся к рассматриваемому местоположению.

Теперь, если я хочу добавить маркер к определенной координате, я делаю:

this->page()->mainFrame()->evaluateJavaScript (QString ("addMarker (%1, %2)").arg (point.x ()).arg (point.y ()) );

Этот код не выполняется. Любые идеи?

Помимо этого, как можно добавить определяемую пользователем функцию в evaluateJavaScript для оценки?


person Aquarius_Girl    schedule 26.05.2011    source источник
comment
@Anisha: Из того, что я вижу, вы печатаете не код ошибки, а просто адрес вашего QNetworkReply? Если вы получаете NULL при вызове get(), значит, что-то не так. Теперь он правильно возвращает новый объект QNetworkReply. Я что-то неправильно понимаю?   -  person Bart    schedule 26.05.2011
comment
@Bart Теперь я добавил код QNetworkReply *h = manager->get (QNetworkRequest (QUrl (hh))); if (h->error() == 0) { cout << "NO ERROR"; } else { cout << hex << "ERROR: " << h << dec; }, и НЕТ ОШИБКИ печатается, но все равно не отображается!   -  person Aquarius_Girl    schedule 26.05.2011
comment
Ничего не отображается? Даже ваша строка loadcoor не может быть cout?   -  person Bart    schedule 26.05.2011
comment
Строка loadcoor отображается после закрытия окна карты :banghead:   -  person Aquarius_Girl    schedule 26.05.2011
comment
Можете ли вы изменить эту строку на cout << "\nloadcoor" << std::endl; и посмотреть, печатается ли она раньше? Я также вижу, что вы не устанавливаете ключ API в geoCode()? Не уверен, что это необходимо, чтобы заставить его работать. Но теперь ваш аргумент key пуст.   -  person Bart    schedule 26.05.2011
comment
Спасибо, что был рядом с Бартом :) Теперь этот loadcoor печатается, но карты НЕТ! Ключ отсутствует, потому что я не делаю все это на веб-сайте. Я загружаю карту только в виджет qt. Эта ссылка запрашивает адрес веб-сайта: code.google.com/apis/maps/signup. html Что делать?   -  person Aquarius_Girl    schedule 26.05.2011
comment
Кроме того, я чувствую, что Javascript не выполняет свою работу, поскольку, когда я использую простую функцию load(), отображается карта.   -  person Aquarius_Girl    schedule 26.05.2011
comment
У меня просто нет опыта работы с Google Maps API и с тем, нужен ли ключ. Так что я не могу помочь вам с этим, к сожалению. Возможно, вы могли бы убедиться, что собранная вами строка выглядит правильно. Боюсь, ничем больше помочь не могу. Удачи.   -  person Bart    schedule 26.05.2011


Ответы (1)


Наконец нашел ответ!

Любая функция Javascript, которая должна вызываться из функции evaluateJavaScript, должна быть определена в файле html (включенном) в исходный код C++, как показано ниже:

Теперь вместо создания новой функции добавления маркера я добавил ее код в функцию Open, определенную ниже:

var map;

function initialize()
{
      if (GBrowserIsCompatible()) 
      {
            map = new GMap2(document.getElementById("map"));
            map.setCenter( new GLatLng(0,0),1 );
      }
    }

function Open (x,y)
{
    map.setCenter (new GLatLng(x,y), 13);

    var point = new GLatLng (x,y);
    map.addOverlay (new GMarker(point));
}
person Aquarius_Girl    schedule 27.05.2011