如何在C++上绘制复杂的用户控件

How can complicated user controls be drawn on C++?

本文关键字:复杂 用户 控件 绘制 C++      更新时间:2023-10-16

像Qt和GTK+这样的框架为开发人员提供了一些标准的用户控件,如编辑框,组合框等。但是许多 GUI 应用程序具有更复杂的用户控件。例如,文本编辑器具有用户可以输入文本和插入图像或表格的区域。音频编辑器通常显示音轨、音量指示器等的波形。我的问题是这些控件是如何绘制的?此外,这些控件通常可以处理事件 - 例如,可以选择文本编辑器中的表,右键单击弹出一些上下文菜单等。因此,问题不仅在于绘制这些控件,还在于使控件处理事件。我只知道使用 Canvas 或 OpenGL,但我怀疑很难实现事件处理。也许,有更简单的方法来绘制用户界面?

这是一个相当模糊的问题,所以这将是一个有点模糊的答案。总的来说,大部分工作已经完成。例如,Qt已经有一个文本视图类,一个图像类和一个表类(我对Qt不是很有经验,只是从我知道的一般东西开始)。对于您正在谈论的文本编辑器,您可以从Qt文本编辑小部件中派生一个类,该小部件具有一个处理程序来接受图像的拖动并可以绘制它们。同样,Qt已经有了绘制图像和进行各种绘画的代码。

要绘制音频波形,您将有某种框或小部件(一般来说),它将为每个采样间隔绘制一条垂直线来表示那里的音量或振幅。

是的,OpenGL对于你在这里谈论的内容来说是矫枉过正的,因为你需要以某种方式编写自己的事件处理,而大多数GUI框架都会为你做到这一点。同样,对于一个模糊的问题,这是一个相当模糊的答案,但我希望它有所帮助!