Я думаю, что моя проблема очень проста, и я, вероятно, скрою что-то невероятно очевидное, но я не смог решить это на некоторое время.Отдельные экземпляры QT-виджета
В моем текущем проекте QT у меня есть 2 файла, один из них - это окно, другое - виджет. Мое окно вызывает мой «пользовательский» виджет и создает экземпляр его и вводит его в фрейм. Это размещение виджета в окне управляется кнопкой, которую можно щелкнуть много раз, потому что я в конечном итоге хочу много экземпляров виджета на экране сразу.
Вот проблема: всякий раз, когда новый экземпляр моего виджета помещается в фрейм, они, кажется, просто отражают значения друг друга, что означает, что когда я делаю вещи в первом экземпляре виджета, это происходит во всех случаях виджет (однако иногда он не обновляется сразу, но я знаю, что это происходит). Я хочу, чтобы они были отдельные экземпляры, которые в будущем будут взаимодействовать друг с другом.
Вот как я обработки инъекционного виджет:
void Window::on_btnNewCell_clicked()
{
ui->verLay->addWidget(new Neuron());
}
А вот основная часть кода моего виджета:
#include "neuron.h"
#include "ui_neuron.h"
#include "qtimer.h"
// Define Neuron Properties
int volt = -70;
int rest = -70;
int max = 40;
// Logic Contol
int excAmt = 10;
int inhAmt = -10;
bool refract = false;
bool timerActive;
bool st = true;
Neuron::Neuron(QWidget *parent):QWidget(parent), ui(new Ui::Neuron)
{
ui->setupUi(this);
//Homeostatic Voltage Changing Timer
tiHom = new QTimer(this);
connect(tiHom, SIGNAL(timeout()), this, SLOT(changeVoltage()),Qt::DirectConnection);
//Duration of mouse depression timer
tiPrs = new QTimer(this);
connect(tiPrs, SIGNAL(timeout()), this, SLOT(chgVltg()),Qt::DirectConnection);
timerActive = false;
}
Neuron::~Neuron()
{
delete ui;
}
// CUSTOM METHODS
void Neuron::changeVoltage(int c)
{
volt = (volt + c);
if (volt >= max) // begin action potential
{
volt = rest;
timerActive = false;
tiHom->stop();
ui->chkFired->setChecked(true);
}
if (volt <= rest) // to not drop below -40
{
if (timerActive == true)
{
timerActive = false;
tiHom->stop();
}
volt = rest;
}
else if (volt >= rest) // to drop it to -40
{
if (timerActive == false)
{
timerActive = true;
tiHom->start(100);
}
}
ui->lblVolt->setText(QString::number(volt));
}
void Neuron::changeVoltage()
{
changeVoltage(-1);
}
void Neuron::chgVltg()
{
if (st == true)
{
changeVoltage(excAmt);
}
else
changeVoltage(inhAmt);
}
void Neuron::updateGlow(int i, bool b)
{
QPixmap pic;
if (b == true) {
if (st == true) pic.load(":/Images/Excitatory/" +QString::number(i) +".png");
else pic.load(":/Images/Inhibitory/" +QString::number(i) +".png");
ui->lblE->setPixmap(pic);
ui->lblE->setEnabled(true);
tiPrs->start(100);
}
else
{
ui->lblE->setEnabled(false);
tiPrs->stop();
}
}
//many additional redundant methods for a lack of an efficient way of implementing them
Ваш код выглядит правильно. Вероятно, ошибка связана с реализацией Neuron. (Используете ли вы статические переменные или такие, чтобы сохранять их состояние?) –
Я не делал ни одной из моих переменных статичными, насколько я знаю, но я, должно быть, что-то прикрутил. Я обновляю свой вступительный пост с основной частью моего кода «Нейрона». – Yattabyte