Я застрял в проблеме с мостом 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' должна иметь строковый тип.