香草C&x2B的GUI开发最佳实践+;应用 我想知道GUI如何开发到香草C++应用程序。我主要在命令行应用方面有经验。我在C++ GUI中的经验是CUT和CIN。我在WPF方面有一些经验(只是说我确实有一些gui经验),我希望这将描述我在gui方面的经验水平。现在,我想开发一个应用程序,它需要单独的图形用户界面和三维显示的可能性。当然,GUI API的一个选择是Qt。另外,在阅读了互联网上的大量资料后,我认为代码分离在未来将非常有用

香草C&x2B的GUI开发最佳实践+;应用 我想知道GUI如何开发到香草C++应用程序。我主要在命令行应用方面有经验。我在C++ GUI中的经验是CUT和CIN。我在WPF方面有一些经验(只是说我确实有一些gui经验),我希望这将描述我在gui方面的经验水平。现在,我想开发一个应用程序,它需要单独的图形用户界面和三维显示的可能性。当然,GUI API的一个选择是Qt。另外,在阅读了互联网上的大量资料后,我认为代码分离在未来将非常有用,c++,qt,user-interface,coding-style,C++,Qt,User Interface,Coding Style,所以,我的问题来了:如果我尽可能保持我的逻辑的通用性(在我的逻辑中不使用winapi或qt),并且只使GUI部分API特定(比如winapi或qt),是否可能。或者我需要在我的逻辑部分添加一些代码,比如逻辑和GUI之间的同步。可以说来自qt的信号和插槽是可能的,但据我所知,信号和插槽是qt特定的。它们不是标准C++。p> 总之,我的问题是我能用标准C++(保持平台/框架独立)和只设计特定于平台的GUI吗?如果是,请您推荐一个链接、教程或书籍。示例代码或实现将是“愿望成真”。此外,对代码分离策略的

所以,我的问题来了:如果我尽可能保持我的逻辑的通用性(在我的逻辑中不使用winapi或qt),并且只使GUI部分API特定(比如winapi或qt),是否可能。或者我需要在我的逻辑部分添加一些代码,比如逻辑和GUI之间的同步。可以说来自qt的信号和插槽是可能的,但据我所知,信号和插槽是qt特定的。它们不是标准C++。p> 总之,我的问题是我能用标准C++(保持平台/框架独立)和只设计特定于平台的GUI吗?如果是,请您推荐一个链接、教程或书籍。示例代码或实现将是“愿望成真”。此外,对代码分离策略的一些见解将非常有用

问候

编辑::
我会详细说明我的问题。我有一个应用程序,它有单独的GUI和逻辑部分。gui使用WinAPI,并且由于使用的通信模式是windows消息,所以以前的用户已经在逻辑中创建了一个HWND对象,该对象与gui通信。因此,逻辑中有一个HWND,GUI中有一个HWND。我觉得这种方法并不令人满意。其中一个原因是,逻辑部分将在后期由非程序员编辑(不太多。只需修改常量或更改函数的实现,而不更改参数或返回值)。所以,我只想让逻辑部分保持标准格式(尽可能多)。因此,有人能帮助我在任何API中设计C++和GUI的业务逻辑。

< P>你可以在很大程度上在QT中完全独立地编写逻辑和GUI代码。但是,如果允许逻辑和GUI代码交互,则可以创建更有用的GUI。Qt在很多方面都有自己的类(QString、QVector等),但是如果您愿意,您可以在大多数情况下忽略这些类,而使用标准库

然而,我认为不值得尝试将Qt与逻辑代码完全分离,因为如前所述,如果它们交互,您将能够构建更好的GUI。对于一个简单的例子,您可以编写一个非常简单的QtGUI,只需一个窗口和一个按钮;按下那个按钮,一些逻辑代码就会运行。然而,通过更多的交互,您可以使用信号和插槽来更新GUI上的进度条,让用户知道逻辑代码已经走了多远。此外,Qt非常可移植,允许您为Windows、Mac和至少一些Linux发行版构建程序


还有你的3D显示需求,我最近发现自己尝试做类似的事情,发现这个例子非常有用。-< /P> < P>我用香草C++和QT-GUI做了一些项目。不把任何QT代码混合到纯C++中的想法总是很好,但是从中可以获得很多乐趣。通常情况下,您最终会得到一个比您预期的复杂得多的GUI,并且通常希望将它更好/更容易地连接到您的代码中。信号和插槽是让GUI与代码交互的一种非常好的方式,但随后您开始混合

TLDR:仔细想想为什么不想将代码与QT等混合使用。这并不意味着混合GUI和逻辑,但使用Qstring、QProcesses或QThreads之类的QT类,您的生活会轻松得多

如果您设法使用QTs信号和插槽机制进行所有交互,那么在某个时候,您甚至可能会将本机QT GUI更改为QT Quick(QML)GUI,它是高度可定制的,具有漂亮的外观和动画等等


这只是我的观点。

我认为默认情况下,您应该将业务逻辑与表示(GUI)代码分开。在web开发中,最常用的模式是,其原理同样适用于本机应用程序

但是,在本机应用程序中,这种分离可能更难实现。主要是因为没有像Symfony这样的框架,它们已经解决了这些体系结构问题,并且通过遵循既定的约定,可以很容易地将UI和业务代码分开。我没有使用过Qt,但据我所知,它主要是一个GUI工具包——模型、视图和控制器没有得到很好的定义和集成

根据所需界面的性质,一个简单的OpenGL GUI可能就足够了。这是我做了一段时间的事情。项目需要根据XML文件中的统计信息显示着色的shapefile。我创建了许多GUI小部件——按钮、标签等,以及一个封装“业务逻辑”的自定义地图小部件。也许我应该“清理”map小部件,使其尽可能通用,并将所有业务逻辑移到一个单独的库中,但考虑到业务层非常薄,我认为增加的复杂性将超过好处


另一个因素是你目前的技能,以及你想要提高的领域。我更感兴趣的是OpenGL和freeglut,然后是学习Qt。如果我知道Qt,我会使用它。

在阅读了一些帖子后,我发现回答自己的问题并不是一个坏习惯。因此,我将分享我得到的答案

<>没有一种标准的方法来构建C++ GUI应用程序而不使用外部依赖关系。gui和逻辑部分之间的同步始终是特定于框架的。所以,如果我想开发一个C++ GUI应用程序,我就不能把逻辑部分放进去