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

标签 c++ qt x11

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

相关文章:

java - 序列化——C++和Java的区别

c++ - 我正在尝试获取媒体播放器的元数据,但在 QT 中不断出现 C2228 错误

c++ - 使用 XSendEvent 传递鼠标事件

C++ mysqlpp::storequeryresult 和 std::vector

c++ - 无法将字符/字符串转换为 int

c++ - 在 C++ STL 中使用 Map 获取编译错误?

c++ - const QString& 的显式模板特化导致未解析的外部

c++ - Qt 添加扩展 QGraphicsItem 到场景

linux - 如何用PyQt4查看DISPLAY是否可以打开?

c - X11 - XCreateImage、Visual * vis 参数