gpt4 book ai didi

c++ - X11 窗口不放入 QWidget 以嵌入 Qt 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 14:32:29 24 4
gpt4 key购买 nike

有一个 Qt 应用程序。 GL-window 通过调用 XCreateWindow 函数创建到这个应用程序中,我无法编辑它。我需要在我的 Qt 应用程序中将 Xwindow 放在 QWidget 中。

在文档中:

void QWidget::create ( WId window = 0, bool initializeWindow = true, 
bool destroyOldWindow = true ) [protected]

如果窗口为 0,则创建一个新的小部件窗口,否则将小部件的窗口设置为 window。如果 initializeWindow 为真,则初始化窗口设置几何等)。如果 initializeWindow 为 false,则不执行初始化。此参数仅在窗口是有效窗口时才有意义。

...

为了验证函数 QWidget::create 的结果,有以下代码:

class ParentWindow : public QWidget
{
Q_OBJECT

public:
ParentWindow(WId id)
{
create(id);
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton* button = new QPushButton("MEGA BUTTON");
button->show();
ParentWindow w(button->winId());
w.show();

return a.exec();
}

当应用程序启动时,会出现一个空白窗口。尽管预期窗口包含一个按钮(或将是一个按钮)。如何将 X11 窗口放入我的 QWidget?

最佳答案

问题已解决:

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

Display* display = XOpenDisplay(NULL);

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

Window x11root = XDefaultRootWindow(display);

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

Window x11w = XCreateSimpleWindow(display, x11root, x, y,
width, height, borderWidth, 1 /*magic number*/, colorBlue);

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

XReparentWindow(display, x11w, w.winId(), 0, 0);
XMapWindow(display, x11w); // must be performed after XReparentWindow,
// otherwise the window is not visible.

return a.exec();
}

通过小部件解决问题 ParentWindow 失败 - xwindow 嵌入在 QWidget 中,但在调整窗口大小和关闭窗口时遇到问题(它不会关闭)。

关于c++ - X11 窗口不放入 QWidget 以嵌入 Qt 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com