gpt4 book ai didi

C++ 流程图/GUI 设计器

转载 作者:太空狗 更新时间:2023-10-29 20:05:41 32 4
gpt4 key购买 nike

我需要编写一个 C++ GUI,这样用户就可以制作一个流程图/管道,方法是从工具栏中选择几个 block 并将它们放入一个窗口中,然后按照他想要的顺序连接它们,然后程序运行流程图。 (为简单起见,只考虑每个 block 的任务是打印一些数字。我的问题是 GUI)

有没有人尝试过类似的事情/任何经验?

是否可以在 WxWidget 或任何其他图形/窗口窗体库中制作这样的 GUI?

是否可以使用VTK制作GUI?

您知道任何类似的开源作品吗?

最佳答案

我开发了几个带有 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 代码。

关于C++ 流程图/GUI 设计器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12189999/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com