2012-08-30 48 views
2

我需要寫一個C++圖形用戶界面,使得用戶可以通過從工具欄中選擇若干塊,並把它們放入一個窗口,他們在他想要,然後一些順序連接使流程圖/管道程序運行流程圖。 (爲簡單起見,考慮每個塊的任務是打印一些數字,我的問題是GUI)C++流程圖/ GUI設計

有沒有人試過類似的東西/任何經驗?

是否有可能在WxWidget或任何其他圖形/窗口形式庫中製作這樣的GUI?

是否可以使用VTK來創建GUI?

你知道任何類似的開源工作嗎?

+1

任何框架,你可以繪製形狀和數字將工作。 –

+1

是的,可以一起使用VTK和wx。 –

+0

@VZ:你知道任何可以給出一些基本想法的簡單例子嗎? – Hesam

回答

3

我已經開發了幾個應用程序與GUI做這種事情。

我最喜歡的一個叫做VASE:用於創建佈局,設置參數和查看過程流模擬器結果的GUI。

enter image description here

這不是一個簡單的任務,但一旦你做了一個或兩個,還有,你可以重複使用很多的想法,它過得很快。

繪製連接對象的兩條最大挑戰(即使在VASE中,這個問題還沒有完全解決),並以易於恢復和重繪的格式存儲該佈局。

是否有任何特殊問題需要幫助?

如果你想要一個真正簡單的例子讓你開始,我已經重新實現了幾個基本特性(所有漂亮和乾淨,沒有版權限制) - 左鍵單擊選擇,拖動移動,右鍵單擊連接。

這裏是源代碼庫 - http://66.199.140.183/cgi-bin/vase.cgi/home

這裏是什麼樣子

enter image description here

我實現了一個簡單的連接器,我稱之爲的管道。爲了給你如何做這樣的東西風味,這裏是添加管在用戶右鍵點擊

/** 

    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代碼,將所有這些代碼結合在一起。

+0

我不知道,例如,我可以使用WxWidget,GTK或VTK來製作這樣的GUI。我需要看一個非常簡單的程序示例來獲得一些想法。 – Hesam

+0

非常感謝,感謝您的幫助。只是一個問題,以這種方式,有可能使這些塊之間的連接,特別是當我們有多端口時?既然你有經驗,你對wxart2d有什麼看法? http://www.wxart2d.org/moin – Hesam

+0

@Hesam想知道您是否正在遵循我已添加到Vase GUI框架的增強功能? – ravenspoint

2

我認爲使用庫如wxArt2D比使用標準wxWidgets drawing classes更容易。 wxArt2D的wires sample看起來與您正在尋找的相似。

+0

謝謝,是的,這是我想要的。我研究了wxArt2D/wires,但似乎沒有該庫的教程或介紹文檔。你有沒有試過使用wsArt2D? – Hesam