Julila
@Julila
вечный студент / german version

Как repaint QtOpenGlWidget?

Добрый день. У меня есть QApplication , который состоит из 4 х виджетов - вкладок.
В каждой вкладке есть QOpenGlWidget, которые share между собой context

К сожалению после того как я переключаю вкладки Event::Show не срабатывает. После клика мышкой -- тогда будет QOpenGLWidget перерисован Как можно это изменить?

m_glXRayWidget = new QOpenGLWidget(this);

	if (data->pShareGLContext == NULL)
		data->pShareGLContext = m_glXRayWidget->context();
	else
		m_glXRayWidget->context()->setShareContext(data->pShareGLContext);

bool XrayLoad::event(QEvent* e)
{
	QWidget::event(e);
	if (e->type() == QEvent::Show )
	{
		if (firstTime){
			firstTime = false;
			workerThread = new PatLoadThread(data);
			connect(workerThread, SIGNAL(process()), this, SLOT(progressChanged()));
			connect(workerThread, SIGNAL(finished()), this, SLOT(progressFinished()));
			workerThread->start();
		}
		else{
			update();
		}
	}
	return true;
}


void XrayLoad::paintEvent(QPaintEvent * event)
{
	m_glXRayWidget->makeCurrent();
	glClear(GL_COLOR_BUFFER_BIT);
	if (data->arrayXRay.size() != 0)
	{ 
		if (data->arrayXRay[currentXray]->getVisible())
		{ 
			int maxDimSize = std::max(m_glXRayWidget->size().width(), m_glXRayWidget->size().height());
			data->arrayXRay[currentXray]->initGL(m_glXRayWidget->size().width(), m_glXRayWidget->size().height());
			data->arrayXRay[currentXray]->GL_RenderXRay(maxDimSize, maxDimSize);
			data->arrayXRay[currentXray]->GL_ApplyCameraCalibration(data->arrayXRay[currentXray]->getZoom(), data->arrayXRay[currentXray]->getPosX(), data->arrayXRay[currentXray]->getPosY(), maxDimSize, maxDimSize, data->arrayXRay[currentXray]->getRotation(), data->arrayXRay[currentXray]->getIsFlipped(), true);  
		}
	}
	// now update openGL window
//	m_glXRayWidget->swapBuffers();
}
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы