我有一个应用程序,我可以使用它绘制分形QPainter
。paintEvent
功能如下:
void SimulationWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QPen my_pen;
initPainter(painter,my_pen);
initCoordsystem(painter);
if(m_mode == TRACE)
{
drawTrajectory(painter,my_pen);
}
else if(m_mode == FRACTAL)
{
drawFractal(painter, my_pen);
}
/*if(!m_isFinished)
{
update();
}*/
}
在这个版本中,最后一个if
被注释掉了,它似乎工作正常。否则它将在运行期间开始连续绘制分形(直到m_isFinished
为真),但在开始后一秒钟,它会崩溃。该drawFractal
函数仅根据另一个名为 computeFractal 的函数的连续计算结果绘制分形,该函数在另一个线程中运行。布尔变量在m_isFinished
此函数开始时设置为 false,最后设置为 true。
我真的很困惑,有人可以告诉我崩溃的原因是什么吗?也许是因为 computeFractal 在不同的线程上运行?( QtConcurrent::run(this -> m_simulationwindow, &SimulationWindow::computeFractal);
)
编辑:
void SimulationWindow::drawFractal(QPainter &painter, QPen &my_pen)
{
for(int i = 0; i < m_colors.size(); ++i)
{
if(m_colors[i] == 0)
{
my_pen.setColor(Qt::red);
painter.setPen(my_pen);
painter.drawPoint(m_positions[i]);
}
else if(m_colors[i] == 1)
{
my_pen.setColor(Qt::green);
painter.setPen(my_pen);
painter.drawPoint(m_positions[i]);
}
else if(m_colors[i] == 2)
{
my_pen.setColor(Qt::blue);
painter.setPen(my_pen);
painter.drawPoint(m_positions[i]);
}
}
}
drawTrajectory
在这种情况下根本不调用。