を使用してフラクタルを描画できるアプリケーションがあります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
true になるまで) フラクタルを継続的に描画し始めますが、開始から 1 秒後にクラッシュします。この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
この場合、まったく呼び出されません。