私は自分の娯楽のためにニューロンの基本機能をシミュレートするプログラムを作成しようとしてきましたが、一定期間にわたって整数を減らす必要があるため、QTimer を使用することにしました。
私の問題は、私のプログラムがメソッド「changeVoltage」に到達し、タイマーを開始する行に到達すると、プログラムが即座にクラッシュすることです。
プログラムが開始されると、ボルトの値は -40 で、「励起」ボタンを押すと、値 10 で changeVoltage をトリガーすることにより、電圧が 10 増加して -30 になります。 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が起動しない理由がわかりません。接続後、回線外で起動できない?私が達成しようとしていることを達成する他の方法はありますか?