[英]Multithreading Crash using QT and QOGL
我有一個在另一個窗口中構造的QOGLWidget小部件,該窗口由QMainwindow中的按鈕激活。 我正在嘗試將圖像的表面從窗口小部件發送到主窗口的QOGLWidget,它崩潰的問題是第一次出現異常訪問沖突。
我認為在這種情況下可能會發生三件事:
框架生成器和GUI之間的連接(SimulatorWindow + GLSimulatorWidget)通過Qt :: AutoConnection連接,並且當它們駐留在單獨的線程上時最終變成Qt :: DirectConnection 。 指定Qt :: QueuedConnection的連接以克服此問題(如果確實在單獨的線程上)。
您可能正在GUI線程之外處理QPixmap 。 這通常會打印出警告,但也許仍然起作用。 通常,如果您不在GUI線程中處理圖像,然后將其發送到GUI線程,則需要使用QPixmap之外的其他功能,例如QImage 。
您的框架對象到達GUI時可能已超出范圍。 例如,如果您構建一個框架,並將其存儲在堆棧的本地范圍內,然后將其傳遞到處理程序或容器中...
...然后,當您離開本地作用域以在GUI中表示對象時,框架對象將消失,並且處理程序/容器將保留錯誤的指針。
要解決此問題,請初始化到堆上並堅持使用Qt Object Model 。 另外,我還希望將容器放在堆上作為它們所屬類的成員變量。
因此,總而言之,請執行以下操作:檢查連接類型,以及幀生成器是否在GUI線程上,如果您位於非GUI的線程中,請使用QImage而不是QPixmap,並確保指針不會超出范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.