将图像从备份的X11 c ++程序传输到Qt应用程序以显示该图像

问题描述 投票:0回答:1

这是将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应用程序。

c++ image qt x11 xorg
1个回答
1
投票

[当您调用w.show()时,您只是要求显示窗口,但是Qt将等待事件循环执行以显示它。您可以尝试2种方法:

  1. [QApplication::processEvents()之后致电w.show()

  2. 正确的方法:子类QMainWindow并在重写的函数中调用getImage:

    void showEvent(QShowEvent* showEvent) override;
    
© www.soinside.com 2019 - 2024. All rights reserved.