标签: xlib

Qt 与 XComposite 问题

我正在尝试编写一个简单的程序,它将所有窗口重定向到后台缓冲区(如复合管理器所做的那样),然后将它们写入像素图并保存到磁盘。但我收到了这个错误:

(.text.startup+0x5e):-1: error: undefined reference to `XCompositeRedirectSubwindows'
(.text.startup+0x171):-1: error: undefined reference to `XCompositeNameWindowPixmap'
:-1: error: collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是代码:

#include <QApplication>
#include <QDebug>
#include <X11/Xlib.h>
#include <QPaintDevice>
#include <QX11Info>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>

#include <QPixmap>
#include <QWidget>

int main( int argc, char *argv[] )
{
    QApplication app( argc, argv );
    app.setGraphicsSystem("native");

    Picture frontBuffer;
    XRenderPictFormat *format;
    Window rootWindow;
    int depth;

    Display *dpy = XOpenDisplay( getenv("DISPLAY") );
    rootWindow = XRootWindow( dpy, …
Run Code Online (Sandbox Code Playgroud)

linux x11 qt qt4 xlib

1
推荐指数
1
解决办法
1267
查看次数

C++ 和 Xlib - 中心窗口

我已经开始直接研究基于 XLib 的 GUI 应用程序编程,我正在尝试在屏幕上创建一个居中的窗口。我不知道用于实现此目的的常用技术。我的代码(不起作用)是这样的(我使用 CodeBlocks)

#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <GL/glew.h>
#include <GL/freeglut.h>

int screen;
Display *display;
XSetWindowAttributes window_attributes;
Window mainwindow;
XEvent events;

int main(int argc, char** argv) {
    display = XOpenDisplay(NULL);screen = DefaultScreen(display);
    window_attributes.background_pixel = XWhitePixel(display, screen);
    window_attributes.border_pixel = XBlackPixel(display, screen);
    window_attributes.win_gravity = SouthWestGravity;

    mainwindow = XCreateWindow(display,
                             RootWindow(display, screen),
                             1, 1,
                             600, 400,
                             0,
                             CopyFromParent,
                             InputOutput,
                             CopyFromParent,
                             CWBackPixel|CWBorderPixel,
                             &window_attributes
                            );
    XMapWindow(display, mainwindow);
    XFlush(display);
    XSelectInput(display, mainwindow, ExposureMask|KeyPressMask|ButtonPressMask);
    while (1) …
Run Code Online (Sandbox Code Playgroud)

c++ linux window center xlib

1
推荐指数
1
解决办法
2193
查看次数

如何在使用 opengl 的 Xlib 窗口中绘制二维文本?

我在 Xlib 窗口中使用 opengl。如何在此窗口上绘制文本(不是在 3d 中)?

opengl xlib

1
推荐指数
1
解决办法
517
查看次数

为什么 XKeysymToKeycode() 使我的所有键都小写?

我目前在使用 Xlib 时遇到问题,每当我调用XKeysymToKeycode()并传入一个大写字母时KeySym,它都会返回一个小写字母KeyCode。就此而言,Google 似乎并没有真正回答这个问题,也没有太多关于我正在使用的功能的文档。

这是我正在使用的代码:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>

int main(void) {
    Display *display;
    char *ptr;
    char c[2] = {0, 0};
    KeySym ksym;
    KeyCode kcode;

    display = XOpenDisplay(0);
    ptr = "Test";

    while (*ptr) {
        c[0] = *ptr;
        ksym = XStringToKeysym(c);
        printf("Before XKeysymToKeycode(): %s\n", XKeysymToString(ksym));
        kcode = XKeysymToKeycode(display, ksym);
        printf("Key code after XKeysymToKeycode(): %s\n", XKeysymToString(XKeycodeToKeysym(display, kcode, 0)));
        ptr++;
    }

    XCloseDisplay(display);

    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

它可以编译为gcc …

c x11 xlib

1
推荐指数
1
解决办法
2265
查看次数

Windows Gui 和 OpenGL 的关系

我最近在大学里一直在学习 OpenGL,并自己搜索了像 Qt 这样的 C++ 中的 Windows GUI 编程。我什至更深入地发现了适用于 Windows GUI 的 XLib。但我仍然没有得到大局。

我知道 Qt 是建立在 XLib 之上的。为了做 OpenGL,我需要通过一些库(如 GLUT)来定义上下文。据我了解,GLUT 基本上是一个通过 GLX 连接 XLib 和 OpenGL 的库。

我还了解到 OpenGL 在 GPU 上运行,并且 XLib 嵌入到操作系统中。那么当操作系统安装在没有 GPU 的计算机上时会发生什么。据我所知它会起作用。这是否意味着 XLib 不依赖 OpenGL 来绘制 Windows 等?如果是这样,它依赖什么?或者它可能通过某个驱动程序逐个像素地绘制它。

简而言之,LibX 是如何实现其 GUI 元素的,是通过 openGL 还是其他方式?

注 1:我用“Windows GUI”指的是按钮、文本框和窗口生成等。注 2:我在 Linux 上运行。

opengl user-interface xlib

1
推荐指数
1
解决办法
941
查看次数

XOpenDisplay(0) 和 XOpenDisplay(NULL) 有什么区别?

Display XOpenDisplay(0) 和 XOpenDisplay(NULL) 有什么区别?

#include <X11/Xlib.h>

struct MwmHints
{
    unsigned long flags;
    unsigned long functions;
    unsigned long decorations;
    long input_mode;
    unsigned long status;
};
enum
{
    MWM_HINTS_FUNCTIONS = (1L << 0),
    MWM_HINTS_DECORATIONS =  (1L << 1),

    MWM_FUNC_ALL = (1L << 0),
    MWM_FUNC_RESIZE = (1L << 1),
    MWM_FUNC_MOVE = (1L << 2),
    MWM_FUNC_MINIMIZE = (1L << 3),
    MWM_FUNC_MAXIMIZE = (1L << 4),
    MWM_FUNC_CLOSE = (1L << 5)
};

extern "C"
{
    void borderless(Window window)
    {
        Display *display = XOpenDisplay(0);
        Atom …
Run Code Online (Sandbox Code Playgroud)

c++ linux x11 xlib

1
推荐指数
1
解决办法
2121
查看次数

来自 X11 库的 Haskell fetchName 不返回窗口的名称

具有以下 Haskell 代码:

import           Control.Concurrent
import           Data.Time.Clock
import           Debug.Trace
import           Graphics.X11
import           Graphics.X11.Xlib.Extras

main :: IO ()
main = do
  d <- openDisplay ""
  loop d

loop :: Display -> IO ()
loop d = do
  time <- getCurrentTime
  (w, _) <- getInputFocus d
  maybeName <- fetchName d w
  windowAttrs <- getWindowAttributes d w
  print $ show time ++ " Name: " ++ show maybeName ++ " Width: " ++ show (wa_width windowAttrs)
  threadDelay 1000000
  loop d
Run Code Online (Sandbox Code Playgroud)

fetchName返回的窗口标题始终为Nothing …

c linux x11 haskell xlib

1
推荐指数
1
解决办法
113
查看次数

XLib:“软关闭”窗口

我知道,我可以通过调用以下命令来“关闭”X11 窗口:

XDestroyWindow(display, id);
Run Code Online (Sandbox Code Playgroud)

问题是,这会立即破坏窗口。另一方面,如果我单击关闭按钮(标题栏中的 x),应用程序可能会显示类似“您真的要退出吗?”的内容。

那么我该如何模拟这种类型的窗口关闭呢?


背景:我正在关闭其他应用程序的窗口,而不是我自己的窗口

c window xlib

0
推荐指数
1
解决办法
1954
查看次数

xlib阻止关闭按钮退出应用程序

是否可以通过单击关闭按钮来阻止应用程序退出?以下代码仅隐藏最小化和最大化按钮但不隐藏按钮...

Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
long value = XInternAtom(display, "_NET_WM_WINDOW_TYPE_TOOLBAR", False);
XChangeProperty(display, window, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value,1 );
Run Code Online (Sandbox Code Playgroud)

我试图通过谷歌搜索覆盖_NET_CLOSE_WINDOW,但无法真正找到一个......或者从xprop中删除_NET_WM_ACTION_CLOSE ...

c c++ xlib

0
推荐指数
1
解决办法
143
查看次数

标签 统计

xlib ×9

c ×4

linux ×4

x11 ×4

c++ ×3

opengl ×2

window ×2

center ×1

haskell ×1

qt ×1

qt4 ×1

user-interface ×1