0

QJSEngineアプリケーションをスクリプト可能にするために を使用しています。JavaScript 側でユーザー インターフェイスを変更できるようにしてほしい。現在の主な問題は、JavaScript から Qt API にアクセスすることです。

ウィジェットを作成するために、以下createWidget()を使用するラッパーを追加しましたQUILoader

// JavaScript
var w = helpers.createWidget("QPushButton");

// C++
QJSValue helpers::createWidget(QString type)
{
    QUILoader ld;
    return engine.newQObject(ld.createWidget(type));
}

からのすべての列挙型も登録しました。これにより、 からqt_getQtMetaObject()の名前空間レベルの列挙型がすべて処理されるようqnamespace.hです。ただし、パブリック API の一部のようには見えません。

私は本当にこれを手動で行うことになっていますか、それとも何か不足していますか? registerAllTheThings()Qt API を利用できるグローバルQtオブジェクトを作成する関数はありませんか?

そうでない場合は、問題があります。で を作成できますが、 などの他のオブジェクトを作成する方法が見つかりませんでしQWidgetた。私はすべての Qt クラスが既に を通じて登録されていると思っていましたが、そうではありません:を返すことで失敗します。繰り返しますが、すべてを登録する初期化関数呼び出しが欠落していますか?QUILoaderQStandardItemModelqRegisterMetaType()QMetaType::type("QStandardItemModel")UnknownType

4

1 に答える 1

1

QQmlEngineの代わりに を使用することをお勧めしQJSEngineます。

QJSEngine から派生しているため、同じモジュール内で同じことを実行できるため、追加の依存関係はありません。

QML でインスタンス化するための型を登録する簡単な方法を提供し、プラグインの読み込みメカニズム (インポート) などを備えています。

Qt World Summit 2015 での講演の一環として、これを発表しました: https://www.youtube.com/watch?v=7LsKoVrb8C8

于 2016-10-02T09:21:24.377 に答える