0

次のjavascriptに似たQtスロットを書きたいのですが、

function testFunc( func1,func2,cond )
{
   if ( cond == 1)
   {
            func1();
   }
  else
  {
           func2();
  }
}

私への質問は次のとおりです。

1)。Javascript関数を引数として受け取る方法は?
2)。C++ から同じ JS 関数を再度呼び出す方法。

これが私の非効率的な解決策です。

Q.1-> JSFunction 引数を QString として取得すると、完全な関数コードが得られます。この場合、そこから関数名だけを抽出するコードを記述する必要があります。

Q.2-> の場合、QWebFrame::evaluateJavaScript で JS 関数を呼び出すことができますが、そのためには、関数名とすべての関数引数の文字列を作成する必要があります。

では、この問題に対して利用できるより良い解決策はありますか?

4

1 に答える 1

2

残念ながら、現時点では、QtWebKit でよりクリーンな方法でこれを行うことはできません。QtScript に加えて、完全な JavaScript <-> C++ バインディングを QtWebKit に追加する取り組みが行われていますが、その進捗状況はわかりません。

つまり、あなたが言及した2つのソリューションが残っていることを意味します(ただし、最初のソリューションはハックであり、匿名関数オブジェクトでは機能しないため、避けることを強くお勧めします)。

もう 1 つの解決策は、2 つのシグナル conditionSatisfied() と conditionFailed() を作成し、それらを func1 と func2 にそれぞれ接続することです。

function func1() { ... }
function func2() { ... }

object.conditionSatisfied.connect(func1);
object.conditionFailed.connect(func2);

次に、C++ 側では次のようにします。

void X::testFunc(const QVariant& cond)
{
    if (cond.toInt() == 1)
        emit conditionSatisfied();
    else
        emit conditionFailed();
}

それは良い設計ではありませんが、これ以上のことはできません。

于 2010-12-26T12:15:21.440 に答える