如何使用 C++ 在 Linux 中创建窗口

How do you create a window in Linux with C++?

本文关键字:创建 窗口 Linux 何使用 C++      更新时间:2023-10-16

我期待一个类似于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);
Ax Martin 说,X11(

或它的分支 XOrg)是窗口系统,但实际上你可以在不使用工具包的情况下编写 X11 应用程序(即客户端),只需使用 X 库即可。有关文档,请参阅此处。

这样做通常不是最好的主意,因为它相当痛苦,并且会涉及大量代码,以便相对简单的应用程序按照您的预期工作。

我知道

这是一个旧帖子。但是对于像我这样最近发现这个的人来说,这是一个有用的图表。这只是你想要/需要在抽象中走多远的问题;如果你不小心,你最终会尝试用二进制编码。XLib 是 SFML 的依赖项,XLib 具有它的依赖项。

图形用户界面层图

假设通过简单的窗口,你的意思是绘图应该出现在屏幕上:Weston 合成器使用 EGLOutput/EGLDevice 在物理显示设备上显示合成的 Weston 桌面或单个 Wayland 应用程序。

对于使用其他制造商的硬件绘制,研究 GEM 可能会给出提示。