有一个 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/