2009-07-26 10 views
2

Qtプロセスを開いてプログラムでウィジェットを追加する方法はありますか?たとえば、フレームを開くプロセスを開始し、別のプログラム(実際は別のスクリプト言語)からの別の呼び出しで、そのフレームにボタンを追加しますか?Qt GUIを動的に操作する

したがって、別のプログラムでは、プロンプトで「フレームを開く」と言ってフレームが開きます。そして、私は "ボタンを追加"と言って、ちょうど開いたフレームにボタンが表示されます。

アドレスコメントに更新されました。 例を追加するように更新しました。

+0

子プロセスはあなたのものではありませんか? (だからそれは仕事のために設計することはできません) – Eugene

答えて

0

この機能はQtアプリケーション(またはFraemwork AFAIK以外のウィンドウ)には組み込まれていませんが、両方のプログラムを作成している場合は、自分でビルドすることができます。

+0

それが可能であることを聞いていいです - ありがとう! – Jeff

0

これを実行する最も良い方法は、両方のプロセスで同じメモリにアクセスするためにQSharedMemoryを使用することです。次に、あなたが記述する内容は完全に可能でなければなりません。

+0

私は@ http://doc.trolltech.com/main-snapshot/ipc-sharedmemory.htmlの例を見ています。これはメモリ読み込み可能なものには意味がありますが、呼び出しはどうですか?だから、別の言語では、私はスクリプト言語で「オープンフレーム」と言ってフレームを開きます。そして、私は "ボタンを追加"と言って、ちょうど開いたフレームにボタンが表示されます。しかし、これは正しい軌道のように思えます.... – Jeff

+0

そして最近のエンゲージメントについての返信 - おめでとうございます。 – Jeff

+1

正しいアドレスをポインタにキャストするだけです。この場合、アドレスをQFrameにキャストしてから、その上で関数を呼び出すことができます。割り当てに注意して、共有メモリに確実に割り当てる必要があります。 –

0

他のアプリにメインアプリで読み込まれたDLL /共有ライブラリを作成できる場合は、
次に、メソッドのメニューを描画するか、dllにフレームを描画します。メインアプリケーションは、dllが存在するかどうかをチェックして読み込み、guiメソッドが存在するかどうかを調べることができます。これはguiプラグインを実装する一般的な方法です。

0

最も簡単な方法は、メインプログラム(描画するプログラム)から一連の関数を公開し、それらを「クライアント」からロードし、必要なときに呼び出すことです。

さらに多くの作業を必要とするもう1つのアプローチは、Qtが提供するもの()を使用できるインプリメンテーションのための共有メモリ、ソケット、d-busなどのようなプロセス間通信を使用することです。

ソケットを使用した簡単な例は、メインプログラムがコマンドを待っているソケットでリッスンし、各コマンドに適切な関数を呼び出させることです。他のプログラムがプロンプトからコマンドを受信すると、それと通信します。

+0

IPCの設定後、QUILoader(http://doc.qtsoftware.com/4.5/quiloader.html)をご覧ください。 .uiファイルをすぐに読み込むことができるので、実行中のプログラムに新しいUIを簡単に追加できます。 – Eugene

1

すでに述べたように、可能です。ドメイン固有のスクリプト言語が必要な場合は、QtScript moduleを使用することをおすすめします。これはECMAScript 262に基づいており、信号、スロットなどにアクセスできます。

IPCまたはTCPを使用してアプリケーションを制御することもできますが、QxtはQxtRPCPeerを提供し、TCPやローカル接続などのQIODevice経由で接続されたアプリケーション間で信号とスロットを接続することができます。

+0

+1はQxtRPCPeerですが、これは本当に気の利いたものです。 – Macke