WindowsでQtWebKitブリッジの問題が発生しましたが、私は オプションを使い果たしました。私は使用されている正確なコードにアクセスすることはできませんが、以下のようなものです。JavaScriptからQt/C++オブジェクトへの文字列の受け渡し
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"を与えます。そのアドレスにメモリを表示すると、UTF-32(1文字あたり4バイト)形式のメモリ内の完全なURLが表示されますが、(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';
私は理由を理解していないpassinリテラルは動作しますが、変数ではない場合、 'url'変数は文字列型でなければなりません。
動作していないようです。メソッドは呼び出されません。ああ、さらに調査しています。 – BCL
これに変更を加えました。 Linuxではこの考え方はうまくいくようですが、LinuxはUTF-32、WindowsはUTF-16です。 未加工のUTF-32ストリームを取得してUTF-16に変換しようとしていますが、すでにQStringであるため、このアイディアが有効かどうかわかりません。 – BCL