c++ - X 显示器的 QDesktopWidget

标签 c++ linux qt xserver

我有一个 X 显示说 :2 。我想在给定的 X 上显示我的 qt 小部件 展示。此显示不同于主显示。因此,除了主显示器(由环境变量 DISPLAY 设置)之外,我还想访问一个额外的 X 显示器。

我知道 QDekstopWidget 有 screen function()。这不是我想要的。我 有一种特殊情况,当我想使用 显示 ID。

让我知道是否有办法做到这一点。 更新:试过这个

#include<QApplication>
#include<QWidget>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xresource.h>


int main(int argc, char *argv[])
{
QApplication a(argc, argv);

Display* display = XOpenDisplay(":1");

XSynchronize(display, True);
//XSetErrorHandler(myErrorHandler);

Window x11root = XDefaultRootWindow(display);

int x = 0;
int y = 0;
unsigned int width = 500;
unsigned int height = 500;
unsigned int borderWidth = 0;
long colorBlue = 0xff0000ff;

Window x11w = XCreateSimpleWindow(display, x11root, x, y, 
    width, height, borderWidth, 1 /*magic number*/, colorBlue);
XMapWindow(display, x11w); // must be performed after XReparentWindow, 
                           // otherwise the window is not visible.

QWidget w;
w.resize(200,200);
w.show();

XReparentWindow(display, w.winId(), x11w, 0, 0);

return a.exec();

按照建议尝试了 qscreen 测试。它正在检测显示器,但两个窗口都在显示:3

shiva@RSV-HP-ENVY-15-Notebook-PC:/tmp/korvins-qtbase-6226fcdc3e4ace4636c58778ef53fbf69f46c36e-6226fcdc3e4ace4636c58778ef53fbf69f46c36e/tests/manual/qscreen$ ./qscreen -platform xcb::3::5
qt.core.logging: Loading "/home/shiva/.config/QtProject/qtlogging.ini" ...
qt.qpa.screen: Output VGA-1-0 is not connected
qt.qpa.screen: Output HDMI-1-0 is not connected
qt.qpa.screen: adding QXcbScreen(0x1b82f60, name="eDP-1-0", geometry=1366x768+0+0, availableGeometry=1309x744+57+24, devicePixelRatio=1.0, logicalDpi=QPair(96.0,96.0), physicalSize=344.0x194.0mm, screenNumber=0, virtualSize=1366x768 (1366.0x768.0mm), orientation=Qt::ScreenOrientation(LandscapeOrientation), depth=24, refreshRate=59.0, root=2c1, windowManagerName="Compiz") (Primary: true )
qt.qpa.screen: primary output is "eDP-1-0"
qt.qpa.screen: connecting to additional display: "" "3"
qt.qpa.screen: adding QXcbScreen(0x1bae540, name="TurboVNC", geometry=1024x716+0+0, availableGeometry=1024x664+0+28, devicePixelRatio=1.0, logicalDpi=QPair(96.0,96.0), physicalSize=271.0x189.0mm, screenNumber=0, virtualSize=1024x716 (1024.0x716.0mm), orientation=Qt::ScreenOrientation(LandscapeOrientation), depth=24, refreshRate=60.0, root=6a, windowManagerName="Metacity") (Primary: true )
qt.qpa.screen: primary output is "TurboVNC"
qt.qpa.screen: connecting to additional display: "" "5"
qt.qpa.screen: adding QXcbScreen(0x1bd6ca0, name="TurboVNC", geometry=1024x716+0+0, availableGeometry=1024x664+0+28, devicePixelRatio=1.0, logicalDpi=QPair(96.0,96.0), physicalSize=271.0x189.0mm, screenNumber=0, virtualSize=1024x716 (1024.0x716.0mm), orientation=Qt::ScreenOrientation(LandscapeOrientation), depth=24, refreshRate=60.0, root=6a, windowManagerName="Metacity") (Primary: true ) 
qt.qpa.screen: primary output is "TurboVNC"
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Xlib: extension "GLX" missing on display ":5".
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface. 

最佳答案

QX11Info 提供对 X 显示信息的访问。引用:QX11Info::display()

我假设您需要打开第二个 X 连接到第二个显示器,并将其传递给新创建的小部件。

Here也是一些信息。

关于c++ - X 显示器的 QDesktopWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35498895/

相关文章:

c++ - 为什么 include(CPack) 应该在每个项目包配置之后?

linux - 在类 Unix 操作系统上重新映射系统范围的 key

c - linux rpc命令和重传

c++ - QThread 在 GUI 事件上调用 glBufferData() 时不更新 OpenGL VBO 并且不呈现任何内容

c++ - SYSTEM 进程是否可以与非 SYSTEM 进程共享数据?

c++ - 在 Linux 上监控电池状态

c++ - json 序列化 C++

c++ - 详细命名空间中的 using 指令是否有问题?

c++ - OpenGL 创建渲染上下文失败

c静态库linux