Опитвам се да създам програма, която симулира основната функционалност на неврон за мое собствено забавление и трябва да намалявам цяло число за определен период от време, така че реших да използвам QTimer.
Проблемът ми е следният, когато програмата ми достигне метода "changeVoltage" и реда, който стартира таймера, програмата моментално се срива.
Когато програмата стартира, стойността на волта е -40 и натискането на бутона 'excite' увеличава напрежението с 10, което го прави -30 чрез задействане на changeVoltage със стойност 10. На теория не трябва да се разпознава като по-високо от 50, вече не е на базовата линия (което, ако случаят беше такъв, тогава щеше да прекрати таймера и да намали напрежението), но е по-високо от -40, което трябва да стартира таймера (което води до бавно намаляване на таймера волта с 1). Но таймерът дори не изглежда да стартира, тъй като когато достигне този ред, цялата програма се срива.
Този файл е както следва:
#include "neuron.h"
#include "ui_neuron.h"
#include "qtimer.h"
int volt = -40;
bool refract = false;
bool timerActive;
Neuron::Neuron(QWidget *parent):QWidget(parent), ui(new Ui::Neuron)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(changeVoltage()),Qt::DirectConnection );
timerActive = false;
}
Neuron::~Neuron()
{
delete ui;
}
void Neuron::on_btnExc_clicked()
{
changeVoltage(10);
}
void Neuron::on_btnInh_clicked()
{
changeVoltage(-10);
}
void Neuron::changeVoltage(int c)
{
volt = (volt + c);
if (volt >= 50) // begin action potential
{
volt = volt -40;
}
if (volt == -40) // to not drop below -40
{
if (timerActive == true)
{
timer->stop();
}
volt = -40;
}
else if (volt >= -40)//start the timer when value changes upwards from -40
{
if (timerActive == false)
{
timerActive = true;
timer->start(1000);
}
}
ui->lblVolt->setText(QString::number(volt));
}
void Neuron::changeVoltage()
{
changeVoltage(-1);
}
Отстранявам грешки и опитвам това от часове и не мога да разбера защо QTimer не стартира. Не може ли да се активира извън линията след свързване? Има ли други начини да постигна това, което се опитвам да постигна?