Передача строки из JavaScript в объект Qt / C ++ - PullRequest
1 голос
/ 23 октября 2011

Я застрял в проблеме с мостом QtWebKit в Windows, и у меня закончились варианты.У меня нет доступа к точному используемому коду, но он выглядит примерно так:

C ++

class MyObject : QWidget {
    Q_OBJECT

public:
    QString data() const;
    void setData(QString);
    Q_PROPERTY(QString data READ data WRITE setData)
};
/* ... */
MyObject myObject;
frame->addToJavaScriptWindowObject("myObject", &myObject);

JavaScript

function drop(e) {
    var url = e.dataTransfer.getData('url');
    //alert(url);   // Displays url correctly
    myObject.data = url;    // Assigns url to C++ object myObject
}

В окне предупреждения правильно отображается строказначение, например 10.10.0.1.Параметр в setData дает мне строку «1».Если затем я просматриваю память по этому адресу, я вижу полный URL-адрес в памяти (отформатированный как UTF-32 (4 байта на символ)), но все, что я пытаюсь (toStdString, toAscii, utf16 - просто для получения разумных данных), я делаюкажется, не сможет получить / использовать всю строку.

Я подумал, что, возможно, отладчик подшучивает, так что я передаю данные методу, который действительно нуждается в этих данных (который также использовал QString), все это может работать - но, к сожалению, нет.

Даже если я сделаю MyObject :: setData Q_INVOKABLE и вызову setData напрямую, я получу то же самое поведение:

myObject.setData(url);  // Assigns url to C++ object myObject

Если я просто передаю данные как литералы, все ДОЛЖНО работать правильно, как

myObject.setData('10.10.0.1');

или

myObject.data = '10.10.0.1';

Я не понимаю, почему при передаче литерального произведения, а не переменной, переменная 'url' должна иметь строковый тип.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Я частично там.Передача строки работает как положено.Однако объект C ++ встроен в веб-страницу и оборачивает объект ActiveX (ActiveQt).Для этого я видел несколько страниц, где вы создаете класс, унаследованный от QWebPage.Там у вас есть метод createPlugins, который запрашивает QUiLoader для создания виджета для вас (в качестве альтернативы вы используете систему Qt Metatype).И мой объект C ++ зарегистрирован.Когда я использую эту пользовательскую веб-страницу в моем веб-представлении (используя setPage), строки передаются неправильно.Когда я отключаю вызов setPage, строки передаются правильно.

Так что передача строк работает (в некоторых условиях).

Я создал новую проблему для этого: Мост Qk Webkit ActiveQtстрока

0 голосов
/ 23 октября 2011

Попробуйте QScriptString вместо QString.

(я не пробовал - ваш случай-, но это может помочь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...