Gleichzeitig sollte sichergestellt sein das alle Events auch direkt abgearbeitet wurden.
Das Anzeigen der Bilder löse ich wie folgt aus:
Die klasse zum Darstellen sieht so aus:
Code: Alles auswählen
void runThread()
{
for (int i = 0; i < m_count; i++)
{
m_CurrentImage = i;
emit signalNewImageAvailable(i);
delay(DelayList[i]);
}
}
Code: Alles auswählen
void DialogGratingPeriodVariation::OnThreadMovieImage(int i)
{
QImage * image = &(*imagelist)[i];
widgetComplexViewMovie->setImage(image);
progressBarCalculation->setValue(i);
}
Code: Alles auswählen
widgetComplexBeamView::widgetComplexBeamView(QWidget* parent /*= 0*/) : QWidget(parent)
{
setAttribute(Qt::WA_NoSystemBackground);
}
widgetComplexBeamView::~widgetComplexBeamView()
{
}
void widgetComplexBeamView::paintEvent(QPaintEvent * event)
{
if (m_Image.width() * m_Image.height() == 0)
return;
QPainter painter(this);
double scaleFracX = m_ViewSize.width()/m_Image.width();
double scaleFracY = m_ViewSize.height()/m_Image.height();
painter.scale(scaleFracX, scaleFracY);
painter.drawImage(0,0, m_Image );
//qDebug() << "Time for Image painting:" << timePaintImage.elapsed();
}
void widgetComplexBeamView::setViewSize(const int iWidth, const int iHeight)
{
m_ViewSize = QSize(iWidth, iHeight);
}
void widgetComplexBeamView::setImage(QImage * image)
{
timePaintImage;
timePaintImage.start();
m_Image = *image;
repaint();
}
1. Die Bilder flackern bei der Darstellung
2. Es passiert das der paintevent mehrfach aufgerufen wird, ohne das der Thread eine neue Iteration gemacht hat.
Beides würde ich gerne verhindern.
Matthias