qt - 将 GLFW 和 OpenGL 用于 GUI 的限制

标签 qt user-interface opengl gtk glfw

我想知道使用 GLFW 和 OpenGL 而不是使用像 Qt 或 GTK 这样的传统 GUI 工具包会导致什么样的限制。

当然,我知道带有 OpenGL 的 GLFW 不会公开相同级别的功能,但是如果只需要几种小部件,我认为这些可以轻松实现。

问题是,与 Qt 或 GTK 相比,是否有某些功能无法在 GLFW/OpenGL 之上实现?

例如,我担心在窗口区域之外绘制菜单(我猜在这种情况下可以使用辅助的非装饰窗口)。

最佳答案

I know that GLFW with OpenGL don't expose the same level of functionality, but if only a few kind of widgets are needed



谈到 OpenGL,本身没有任何限制。你可以随心所欲地画画。您可以绘制的区域是操作系统方面的限制因素。

请记住,一些“简单”的功能,比如文本框,已经很复杂了。您不仅必须处理渲染(并且可缩放文本并不总是很有趣),而且您还必须处理键盘事件。绘制光标和文本选择等。

For example, I'm worried about drawing menus outside the window region (I guess that an auxiliary non-decorated window could be use in this case).



当涉及到在窗口区域外绘制时,这与 OpenGL 没有直接关系。这更多是一个取决于操作系统的问题。

例如,使用 WinAPI,您只需执行以下操作即可在屏幕上的任何位置绘制:
#include <Windows.h>

int main(int argc, char **argv)
{
    HWND desktop = GetDesktopWindow();
    HDC dc = GetDC(desktop);

    RECT rect = { 20, 20, 200, 200 };
    HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
    FillRect(dc, &rect, brush);

    return 0;
}

请注意,当屏幕重绘该区域时,矩形将立即消失。

如果你已经有一个窗口,那么你可以使用 SetWindowRgn() 更改允许您的应用程序在其中绘制的区域。请注意,您不能只更改此区域,一切都会好起来的。

The question is, is there some feature that couldn't be implemented on top of GLFW/OpenGL in contrast to Qt or GTK?



底线是没有。在 Qt 和 GTK 中,没有任何您无法使用 OpenGL 实现的功能。关键是它不仅仅是 OpenGL,而且很多都取决于操作系统,因此需要特定于操作系统的代码。

关于qt - 将 GLFW 和 OpenGL 用于 GUI 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649315/

相关文章:

qt - 如何仅在文件夹中获取图像文件列表

c++ - MainWindow 中的 QTableView 和选项卡排序

QTableView 似乎没有对 dataChanged 信号使用react

javascript - extjs 4.2.1 - 围绕组件包装布局容器

java - 在javaFx中,为什么在向窗口添加元素时为什么需要调用 “getChildren()”?

c++ - 为什么我的glDrawArrays没有绘制存储的点?

opengl - OpenGL CUDA互操作的内部格式

c++ - 纹理不适用于 OpenGL

c++ - 按字母顺序更新和排序 Qt ComboBoxes

java - Window Batch 文件集成到 Java GUI 中