diff --git a/src/calcprime.cpp b/src/calcprime.cpp index e69de29..a608c42 100644 --- a/src/calcprime.cpp +++ b/src/calcprime.cpp @@ -0,0 +1,64 @@ +#include "calcprime.h" + +CalcPrime::CalcPrime(QObject *parent) + : QObject( parent ) + , m_bCalculate( false ) + , m_curValue( 0 ) + , m_timer() + , oForm() +{ + m_timer.setInterval( 1 ); + m_timer.setSingleShot( true ); + + connect( &m_timer, &QTimer::timeout, this, &CalcPrime::slotTimeOut ); + + connect( &oForm, &CalcPrimeForm::signalStartButtonClicked, this, &CalcPrime::slotStartCalculation ); + connect( &oForm, &CalcPrimeForm::signalStopButtonClicked, this, &CalcPrime::slotStopCalculation ); + + connect( this, &CalcPrime::signalCurrentValue, &oForm, &CalcPrimeForm::slotUpdateCurrentValue ); + connect( this, &CalcPrime::signalPrimeNumberFound, &oForm, &CalcPrimeForm::slotAddNewPrime ); + + oForm.show(); +} + +void CalcPrime::slotStartCalculation() +{ + m_bCalculate = true; + slotTimeOut(); +} + +void CalcPrime::slotStopCalculation() +{ + m_bCalculate = false; +} + +void CalcPrime::slotTimeOut() +{ + emit signalCurrentValue( m_curValue ); + if( number_is_prime( m_curValue ) ) + { + emit signalPrimeNumberFound( m_curValue ); + } + + m_curValue++; + + if( m_bCalculate ) + { + m_timer.start(); + } +} + +bool CalcPrime::number_is_prime(uint64_t number) +{ + uint64_t m = number / 2; + + for( uint64_t i = 2; i <= m; i++ ) + { + if( number % i == 0 ) + { + return false; + } + } + + return true; +} diff --git a/src/calcprime.h b/src/calcprime.h index ce3f30c..157bfac 100644 --- a/src/calcprime.h +++ b/src/calcprime.h @@ -1,7 +1,9 @@ #pragma once #include "calcprime_form.h" + #include +#include class CalcPrime : public QObject { @@ -10,10 +12,6 @@ class CalcPrime : public QObject public: explicit CalcPrime(QObject *parent = nullptr); -private: - bool m_bCalculate; - uint64_t m_curValue; - signals: void signalCurrentValue( uint64_t current_value ); void signalPrimeNumberFound( uint64_t prime_number ); @@ -21,4 +19,16 @@ signals: private slots: void slotStartCalculation(); void slotStopCalculation(); + void slotTimeOut(); + +private: + bool number_is_prime(uint64_t number); + +private: + bool m_bCalculate; + uint64_t m_curValue; + QTimer m_timer; + + CalcPrimeForm oForm; + }; diff --git a/src/calcprime_form.cpp b/src/calcprime_form.cpp index d22e9bb..0d23f58 100644 --- a/src/calcprime_form.cpp +++ b/src/calcprime_form.cpp @@ -23,7 +23,8 @@ void CalcPrimeForm::slotUpdateCurrentValue( uint64_t value ) void CalcPrimeForm::slotAddNewPrime( uint64_t new_prime ) { - this->listPrimes->addItem(QString( std::to_string( new_prime ).c_str() )); + this->listPrimes->insertPlainText(QString( std::to_string( new_prime ).c_str() ) + "\t"); + this->listPrimes->centerCursor(); } void CalcPrimeForm::slotStartButtonClicked() diff --git a/src/calcprime_form.ui b/src/calcprime_form.ui index ef2e00e..4e3dd54 100644 --- a/src/calcprime_form.ui +++ b/src/calcprime_form.ui @@ -18,13 +18,33 @@ + + + 13 + true + + + + color: rgb(170, 255, 0); +background-color: rgb(0, 0, 127); + 30 - + + + false + + + Qt::NoTextInteraction + + + false + + @@ -36,6 +56,26 @@ + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Reset + + + + Qt::Horizontal diff --git a/src/main.cpp b/src/main.cpp index f179134..eca95bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,13 +1,12 @@ #include -#include "calcprime_form.h" +#include "calcprime.h" int main( int argc, char* argv[] ) { QApplication oApp( argc, argv ); - CalcPrimeForm oForm; - oForm.show(); + CalcPrime ocalcPrime; oApp.exec(); }