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

时间:2012-06-25 14:09:45

标签: c++ linux window

我期待一个类似于Windows API的Linux API。我在Google上看到的只是对Qt和GTK的引用。我真的不需要用OpenGL绘制一个简单的窗口,所以这些库看起来很臃肿供我使用。 Qt和GTK用什么来在Linux下创建窗口?没有更低级的了吗?

6 个答案:

答案 0 :(得分:10)

X窗口系统通常会绘制图形 - 然后在原始Xlib之上使用Qt或GTK等工具包来提供事件循环,拖放,在鼠标点击上启动应用程序以及所有其他“桌面”内容

使用Xlib and opengl直接工作相当容易,或者如果您只想学习opengl,glut提供了显示窗口,处理鼠标/键盘事件等所需的框架。

答案 1 :(得分:9)

对于OpenGL,最简单的方法是使用GLUTSDL。这是使用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应用程序移植到不同的平台。

答案 2 :(得分:3)

Axe Martin说,X11(或它的叉子XOrg这些天)是窗口系统,但是你可以在不使用工具包的情况下编写X11应用程序(即客户端),只需使用X库。有关文档,请参阅here

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

答案 3 :(得分:0)

2019年更新的答案。类似Unix的系统通常使用X窗口系统。您可以直接使用Xlib这是低级API来使用它。但是您可能需要一个更受欢迎且跨平台的解决方案。您可以使用OpenGL实用工具包-GLUT或简单快速的多媒体库-SMFL或简单的DirectMedia层-SDL或GLFW,我建议使用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);

答案 4 :(得分:0)

假设通过简单的窗口,您的意思是绘图应该出现在屏幕上: The Weston compositor uses EGLOutput/EGLDevice to display the composited Weston desktop or individual Wayland applications on a physical display device.

对于使用其他制造商的硬件进行绘图,学习 GEM 可能会提供提示。

答案 5 :(得分:0)

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

Diagram of GUI Layers

相关问题