Передача изображения из резервной программы X11 c ++ в приложение Qt для отображения этого изображения - PullRequest
0 голосов
/ 03 апреля 2020

Это функция, которая принимает идентификатор родительского окна приложения Qt в качестве параметра

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, но программа падает на XFillRectangle() и работает нормально, когда я закомментирую функцию getImage(Window win) в приложении Qt. По сути, я хочу сделать аннотацию изображения в окне Qt, но фрейм наложения аннотации должен исходить из этого запущенного приложения x11.

1 Ответ

1 голос
/ 04 апреля 2020

Когда вы вызываете w.show(), вы просто просите показать окно, но Qt будет ожидать выполнения события l oop, чтобы отобразить его. У вас есть 2 способа попробовать:

  1. Вызов QApplication::processEvents() после w.show()

  2. Правильный путь: подкласс QMainWindow и вызов getImage в переопределенной функции :

    void showEvent(QShowEvent* showEvent) override;
    
...