私の Qt アプリケーションでは、QtScript を使用してスクリプトからダイアログのすべてのコントロールにアクセスできます。これを行うには、次のように QScriptEngine の newQObject メソッドを使用します。
QScriptValue btn = scriptEngine->newQObject(okBtn, QScriptEngine::QtOwnership);
controls.setProperty("okButton", btn, QScriptValue::ReadOnly);
たとえば、スクリプトでこれを実行できるようになりました。
dialog.controls.okButton.setEnabled(false);
これは、公開されたコントロール ( okButton )の呼び出されたメソッド ( setEnabled ) がオブジェクト クラスのパブリック スロットとしてマークされている限り、正常に機能します。残念ながら、スクリプトから呼び出せるようにしたいメソッドの多くは、通常のパブリックスコープでのみ定義されています。
これを解決する 1 つの方法は、各 Qt UI 要素から新しいクラスを派生させ、これらのメソッドをパブリック スロットとしてオーバーライドすることです。しかし、これはコーディングとメンテナンスの大きなオーバーヘッドを意味し、この状況では望ましくありません。
スクリプト エンジンに、既定で通常のパブリック関数を利用可能にするように指示する方法はありますか?