3

ユーザーがツールバーからいくつかのブロックを選択してウィンドウに配置し、それらを任意の順序で接続してフローチャート/パイプラインを作成し、プログラムがフローチャートを実行できるように、C++ GUI を作成する必要があります。(簡単にするために、各ブロックのタスクは数字を出力することだと考えてください。私の問題はGUIです)

誰かが似たようなことや経験を試みたことはありますか?

WxWidget やその他のグラフィックス/ウィンドウ フォーム ライブラリでそのような GUI を作成することは可能ですか?

VTK を使用して GUI を作成することは可能ですか?

同様のオープンソースの取り組みを知っていますか?

4

3 に答える 3

4

私は、この種のことを行う GUI を備えたいくつかのアプリを開発しました。

私が最も満足しているのは、VASE と呼ばれるものです。これは、プロセス フロー シミュレーターのレイアウトの作成、パラメーターの設定、および結果の表示に使用される GUI です。

ここに画像の説明を入力

これは簡単な作業ではありませんが、1 つまたは 2 つの作業を行うと、再利用できる多くのアイデアがあり、すぐに完了します。

2 つの最大の課題は、オブジェクトを接続する線を描画すること (ご覧のとおり、VASE でも、この問題は完全には解決されていません) と、そのレイアウトを簡単に復元して再描画できる形式で保存することです。

サポートが必要な特定の問題はありますか?

開始するために非常に単純な例が必要な場合は、いくつかの基本的な機能を再実装しました (すべて素晴らしくきれいで、著作権の制限はありません) - 左クリックで選択、ドラッグして移動、右クリックで接続。

ここにソースコードリポジトリがあります -http://66.199.140.183/cgi-bin/vase.cgi/home

これがどのように見えるかです

ここに画像の説明を入力

私は単純化されたコネクタを実装しました。これをパイプと呼びます。この種のことを行う方法の風味を与えるために、ユーザーが右クリックしたときにパイプを追加するコードを次に示します

/**

  User has right clicked

  If he right clicks on a flower
  and there is a different flower selected
  then connect the selected flower to the right clicked flower

  if he right clicks on empty background
  create a new flower

*/
void cVase::MouseRightDown( wxMouseEvent& event )
{
    // find flower under click
    iterator iter_flower_clicked = find( event.GetPosition() );

    // check there was a flower under click
    if( iter_flower_clicked != end() ) {

        // check that we have a selected flower
        if( ! mySelected )
            return;
        // check that selected flower is different from one clicked
        if( mySelected == (*iter_flower_clicked) )
            return;
        // construct pipe from selected flower to clicked flower
        myPipe.push_back(cPipe( mySelected, *iter_flower_clicked ));

    } else {

        // no flower under click
        // make one appear!
        cFlower * pflower  = Add();
        pflower->setLocation( event.GetPosition() );
    }
    // redraw everything
    Refresh();
}

そして、ここにパイプを描くコードがあります

/**

 Draw the pipe

 From starting flower's exit port to ending flower's entry port

*/
void cPipe::Paint( wxPaintDC& dc )
{
    dc.SetPen( *wxBLUE_PEN );
    dc.DrawLine( myStart->getExitPort(), myEnd->getEntryPort() );
}

ソース コード リポジトリを参照すると、これらすべてを結び付ける残りの wxWidgets コードを確認できます。

于 2012-08-30T10:59:14.313 に答える
3

標準の wxWidgets 描画クラスを使用するよりも、 wxArt2Dなどのライブラリを使用する方が簡単だと思います。wxArt2Dのワイヤ サンプルは、探しているものと似ています。

于 2012-08-30T07:05:54.590 に答える