2012-11-30 46 views
1

我在tcl/tk方面有很多经验,但是我想摆脱大型项目的脚本语言。但tk画布有一个非常大的功能,我不得不用一个好的GUI工具包取代。gui工具包,需要C++界面和需要的智能画布支持

我需要的一个功能是可以在其上创建活动图形对象的画布。例如,我有可以通过鼠标拖动像这样的TK移动的圆圈:

#!/usr/bin/wish8.5 

    canvas .c 
    pack .c 
    set item [.c create oval 10 10 20 20] 

    .c bind $item <Any-Enter> ".c itemconfig current -fill red" 
    .c bind $item <Any-Leave> ".c itemconfig current -fill blue" 

    bind .c <ButtonPress-1> "setlast %x %y" 
    bind .c <B1-Motion> "moveit %x %y" 

    set lastx 0 
    set lasty 0 

    proc setlast { x y } { 
     global lastx 
     global lasty 
     set lastx $x 
     set lasty $y 
    } 

    proc moveit { x y } { 
     global lastx 
     global lasty 
     .c move current [expr $x-$lastx] [expr $y-$lasty] 
     set lastx $x 
     set lasty $y 
    } 

任何其他工具,我发现需要大量的手工工作,为这一点。通常情况下,您必须找出画布上的哪个项目位于鼠标下面,这对于复杂形状(如多边形)来说是一项非常大的工作量。

+0

你最终找到了答案吗?你是如何解决这个问题的?我的确有完全相同的问题... –

+0

我发现的具有最小功能的唯一组件是goocanvas(mm)。但:它不像tk画布那样容易使用。而且你必须处理来自画布部件意外行为的许多神秘效果。从画布上的鼠标事件调用对话框是一个悲剧!如果你想打印,你必须像在gtk中一样编写自己的打印支持。对我来说,也许我很愚蠢,但是如果用goocanvasmm的话,它会花费更多的时间。我相信通过C++接口使用tk-canvas是一种更好的方式!我会拆分我的编程这样做!gtk不好 – Klaus

+0

好主意!我认为这个问题的答案。我有一个快速的外观和[链接](http://cpptk.sourceforge.net)看起来很有趣。它使用Tcl/Tk-isch语法。我用Tkx模块从Perl中使用了Tk,并使用了不同的语法,但是,嘿,在某些新技术中,转换它比重新转换为整个界面要容易得多。无论如何,请将您的解决方案的技术细节通知我们。 –

回答

1

您是否尝试过GTK +或QT? 那么,QT主要是一个开发平台,而不是GUI库,但你也可以试试它。

1

我试过C++/Tk但是离开了那条路。它不支持所有的Tk,例如不支持笔记本和treelist等特色小部件,或者不能将参数传递给命令。此外,实现非常复杂,如果某些事情没有按预期工作,则调试非常繁重。解决问题一周后,我沮丧地决定转储C++/Tk。

退出C++/Tk,输入Qt(你应该说“可爱”,但它有点愚蠢,所以我说“排队三通”)。它有一个商业的,但也是一个开源许可证,正在进行着积极的开发,它有大量的例子记录,它支持大多数桌面和移动操作系统,有一个活跃的社区,包括wiki和博客,......除了GUI和图形的东西有可用于多媒体,网络,SQL,测试,其他模块...

由于QT的发展起步早在1991年(这是一段时间诺基亚的一部分),也有一些部件是“旧的”并被新的东西取代,但与微软相比,这些文档更清晰。而且与微软相比,整套技术是一致的。

对于与C++的集成方法有两种:

  1. 使用MSVS和QT插件。我尝试过,但无法使其正常工作。也许我应该尝试更多,但经过两天的努力,我已经受够了。
  2. 使用将使用您已安装的C++编译器的QT IDE。这工作正常,这就是我现在这样做的方式。缺点是编辑时间错误检查并不像MSVS那样强大。然而,一个优点是,当你有免费版本的MSVS时,你也可以编译64位。

如果你想做一个GUI,你一定要考虑Qt。

+0

感谢您的回复!但特别是一个智能画布小部件在Qt中不可用,所以我决定不移动到Qt。而我在Qt方面的经验是,它在界面设计中非常一致。我不喜欢那里的所有宏观东西。也许更新的版本更加一致,可能会使用所有C++ 11的东西。但如前所述,这里没有画布...... – Klaus

+0

那么在Qt中有一个画布,它被称为'QGraphicsScene'。你用所有的图形对象创建一个场景,然后用'QGraphicsView'显示它。构建和查看是分开的,这样您就可以拥有多个场景的视图。 –