我需要编写一个C ++ GUI,以便用户可以通过从工具栏中选择几个块并将它们放入窗口并按照他想要的顺序连接它们来制作流程图/管道,然后程序运行流程图。 (为简单起见,只考虑每个块的任务是打印一些数字。我的问题是GUI)
有没有人尝试类似的事情/任何经历?
是否可以在WxWidget或任何其他图形/窗口形式的库中创建这样的GUI?
是否可以使用VTK制作GUI?
你知道任何类似的开源工作吗?
答案 0 :(得分:4)
我已经开发了几个带有GUI的应用程序来完成这类工作。
我最满意的是VASE:用于创建布局,设置参数和查看流程模拟器结果的GUI。
这不是一项微不足道的任务,但是一旦完成了一两项任务,就会有很多想法可以重复使用,而且很快就能实现。
绘制连接对象的线条的两个最大挑战(正如您所看到的,即使在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代码将所有这些代码联系在一起。
答案 1 :(得分:3)
我认为使用wxArt2D这样的库比使用标准的wxWidgets drawing classes更容易。 wxArt2D的wires sample看起来与您正在寻找的类似。
答案 2 :(得分:1)
也许您可以尝试使用名为Flowchart to Code的小工具,您可以获得所需的流程图,就像这样。可以在此处下载:http://www.athtek.com/flowchart-to-code.html#.Ug4z29JPTfI