В моем Qt 5.3 приложения, я хочу, чтобы интегрировать GUI из дочернего процесса в моем главное окно процесса:ошибка рисования и авария с QWidget :: createWindowContainer
- дочерний процесс создает верхний уровень
QWidget
, - Детский процесс связывает виджет
WId
как возвращаемый сQWidget::winId()
родительскому объекту (с использованием IPC). - Родитель использует
QWindow::fromWinId()
иQWidget::createWindowContainer()
для созданияQWidget
отображения графического интерфейса дочернего процесса. Этот виджет встроен в макет другого виджета.
Наблюдение: отображается
- ГИП ребенок, но не отображается правильно: есть белые границы, которые не обновляются должным образом при повторной калибровке родителя.
- Если размер родительского окна слишком мал, дочерний процесс выходит из строя из-за нарушения доступа к памяти в коде Qt.
- Если я не укажу родителя с
QWidget::createWindowContainer()
, чтобы вместо этого использовать отдельное окно верхнего уровня, он встроен просто отлично. - После того, как ребенок открывает модальное диалоговое окно, такое как
QMessageBox
, проблема исправляет себя, и ребенок встроен правильно после следующего изменения размера родителя.
Особенно, что касается вопросов, связанных с последней точкой. Я попытался выяснить, запускает ли QMessageBox
некоторые флаги дочернего виджета, и если я смогу имитировать эти изменения вручную, чтобы обойти проблему без везения.
Есть ли у кого-нибудь идеи, что здесь происходит? Что может сделать модальный диалог с виджетами, которые устраняют проблему?
Спасибо за ваш ответ! Поскольку я не нахожусь в офисе, я попробую ваш совет и даю отзывы в понедельник CET. Я очень рад видеть, работает ли ваше простое решение! –
Yay, «FramelessWindowHint» исправляет как рендеринг границ, так и * сбой! Я рад, что существует такое простое решение/обходное решение. Спасибо, ты заработал щедрость! :) –