这是将Qt应用程序的父窗口ID作为参数的功能
void getImage(Window win){
d=XOpenDisplay(NULL);
s=DefaultScreen(d);
w=XCreateSimpleWindow(d, RootWindow(d, s), 1000, 1000, 100, 100, 14,BlackPixel(d,s),WhitePixel(d, s));
XMapWindow(d, w);
XReparentWindow(display, w,win, 50, 50);
XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 60, 60);
}
这是Qt应用程序,正在调用getImage(Window win)函数。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
getImage(w.winId());
return a.exec();
}
我正在尝试从x11应用程序获取图像并将其显示在Qt窗口上,但是当我在Qt应用程序中注释掉XFillRectangle()
函数时,程序在getImage(Window win)
崩溃并且工作正常。基本上我想在Qt窗口上进行图像注释,但是注释叠加帧必须来自正在运行的x11应用程序。
[当您调用w.show()
时,您只是要求显示窗口,但是Qt将等待事件循环执行以显示它。您可以尝试2种方法:
[QApplication::processEvents()
之后致电w.show()
正确的方法:子类QMainWindow并在重写的函数中调用getImage:
void showEvent(QShowEvent* showEvent) override;