如何使用 C++ 在 Linux 中创建窗口
How do you create a window in Linux with C++?
我期待一个类似于Windows API的Linux API。我在谷歌上看到的只是对Qt和GTK的引用。我真的只需要一个简单的窗口来绘制OpenGL,所以这些库对于我的使用来说显得臃肿。Qt和GTK在Linux下使用什么来创建Windows?没有更低级的吗?
X 窗口系统通常会绘制 - 然后您在原始 Xlib 之上使用诸如 Qt 或 GTK 之类的工具包来提供事件循环、拖放、在鼠标单击时启动应用程序以及所有其他"桌面"内容
。直接使用 Xlib 和 opengl 相当容易,或者如果你只是想学习 opengl,glut 提供了显示窗口、处理鼠标/键盘事件等所需的框架。
对于OpenGL,最简单的方法是使用GLUT或SDL。 下面是使用 GLUT 的近似示例:
#include <GL/glut.h>
int main (int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("My new window");
/* ... */
}
您真的想避免直接使用 Xlib,因为它使用起来非常乏味。 此外,GLUT 和 SDL 可以更轻松地将 OpenGL 应用程序移植到不同的平台。
更新了 2019 年的答案。类Unix系统通常使用X窗口系统。你可以直接使用Xlib使用它,这是低级API。但您可能需要一个更受欢迎的跨平台解决方案。您可以使用:
- OpenGL Utility Toolkit - GLUT
- 简单快速的多媒体库 - SFML
- 简单直接媒体层 - SDL
- 图形库框架 - GLFW(我的建议)
GLFW是用C语言编写的,并且对Windows,macOS和许多使用X Window系统的类Unix系统(如Linux和FreeBSD)具有本机支持。
安装后,创建一个窗口,其中包含:
#include <GLFW/glfw3.h>
.
. //Entry and glfwInit()
.
GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL);
glfwMakeContextCurrent(window);
或它的分支 XOrg)是窗口系统,但实际上你可以在不使用工具包的情况下编写 X11 应用程序(即客户端),只需使用 X 库即可。有关文档,请参阅此处。
这样做通常不是最好的主意,因为它相当痛苦,并且会涉及大量代码,以便相对简单的应用程序按照您的预期工作。
这是一个旧帖子。但是对于像我这样最近发现这个的人来说,这是一个有用的图表。这只是你想要/需要在抽象中走多远的问题;如果你不小心,你最终会尝试用二进制编码。XLib 是 SFML 的依赖项,XLib 具有它的依赖项。
图形用户界面层图
假设通过简单的窗口,你的意思是绘图应该出现在屏幕上:Weston 合成器使用 EGLOutput/EGLDevice 在物理显示设备上显示合成的 Weston 桌面或单个 Wayland 应用程序。
对于使用其他制造商的硬件绘制,研究 GEM 可能会给出提示。
- 是否可以从控制台应用程序使用 C++/WinRT 创建窗口?
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- 有没有办法一次运行 3 个创建窗口函数?
- 使用带有诅咒库的 stdscr 创建窗口,在边框而不是线条中显示不需要的笑脸字符
- 无法使用 CreateWindowEx 函数创建窗口
- 无法创建窗口
- openGL PBO 使用 wglcontext,而不是创建窗口
- SDL2 无法创建窗口,因为它找不到匹配的 GLX 视觉对象
- 可以控制台应用程序自行创建窗口
- 为对话框创建窗口类
- OpenGL /Glut在Maineventloop()之后创建窗口
- 我无法创建窗口
- 创建窗口参数类型错误
- 在 C++ 中创建窗口
- 获取确切的窗口区域大小 - 创建窗口窗口大小不正确
- WinAPI在dll中创建窗口
- 如何在作为控制台启动的应用程序中创建窗口
- 创建窗口不起作用,但不提供错误消息
- 如何使用 C++ 在 Linux 中创建窗口
- WinAPI 创建窗口 + 子窗口,处理一个按钮按下