情景還原
IDE:Qt Creator,OpenGL:4.5,Qt:5.9.8
我可以在一個視窗中正常顯示多個QOpenGLWidget控制元件(已經創建子類),例如:
m_pVBLayout = new QVBoxLayout(this);
for(int i=0; i<10; i++){
m_pVBLayout->addWidget(new QOpenGLWidget(this));
}
并且可以通過按鈕點擊槽動態添加QOpenGLWidget控制元件。但是在按鈕點擊槽中打開一個新的視窗,新視窗中的所有QOpenGLWidget控制元件都不能正常顯示,類似一個空視窗。
在關閉這個新視窗時程式會報錯,程式停在glDrawElements方法:

分析可能出現的問題
查看QOpenGLWidget幫助檔案,有這么一段:

根據這段檔案,分析可能的原因是在一個視窗中創建新的視窗,兩個視窗擁有各自的背景關系,并且背景關系存在沖突。嘗試通過全域共享背景關系解決,在程式開始部分添加如下代碼:
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
QApplication a(argc, argv);
程式啟動后,第一個視窗中QOpenGLWidget控制元件可以正常顯示,第二個視窗中的QOpenGLWidget控制元件依舊不顯示。但關閉第二個視窗時,沒有提示錯誤,程式正常運行。
有沒有朋友幫忙看一下,非常感謝!
uj5u.com熱心網友回復:
發現一個解決方法,當子視窗為模態視窗時,并且限制子視窗的作用域,顯示正常。這個方法不適用new的子視窗
{
QDialog dialog(this);
dialog.exec();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/29331.html
標籤:工具平臺和程序庫
上一篇:如何用C++ 撰寫生產二維陣列的程式 可放進頭檔案呼叫
下一篇:新人求助帖
