2

私はプロプライエタリQt(4.5.2)アプリケーションに注入し、QtScriptの独自の互換性のあるビルドを追加し、必要なすべてのシグナルにアクセスできるようになりました。ただし、(QtScriptを介して)それらに接続すると、関数が呼び出されることはありません。

私はこれがなぜであるかについていくつかの理論を考え出し、私が考えることができるすべてをテストしました、しかし私は少し壁にぶつかりました。注意してください、私は接続の例外をまったく持っていません。これが私の現在の理論です:

  • 私が接続している信号はすでに他のスロットに接続されており、それが何らかの形でそれをブロックしています(しかし、私が知る限り、すべてのQt信号は余分な作業なしですべてのスロットに発火し、このように制限することはできません)
  • 信号が接続を拒否しているか、接続後に切断しています(ただし、このための機能はありません)
  • 私の接続は別のスレッドから発生していますが、これが原因で正しく接続されていません

これらの理論のいずれかがもっともらしいですか?そうでない場合、私は何を逃しましたか?

4

2 に答える 2

3

内部を掘り下げて多くの質問をした後 (つまり、ここと Freenode の #qt で)、なんとか動作させることができました。問題は、挿入したコードがイベント ポンプなしでネイティブ スレッドで実行されることでした。QEventLoop をインスタンス化し、定期的に processEvents() を呼び出すと、これが解決されました。

于 2010-05-03T17:57:58.387 に答える
0

この質問は本当に古く、すでに回答されていますが、助けを求めてここに来て、上記が適切な解決策ではない場合は、connectステートメントのQt::ConnectionTypeをQt::DirectConnectionに設定することを検討してください。 :

QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)),
                 Qt::DirectConnection);

これは同じ問題を別の方法で解決するはずです。

于 2011-08-05T16:34:58.960 に答える