我认为我的问题非常简单,我可能会忽略一些非常明显的事情,但我现在还没能解决这个问题。
在我目前的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
答案 0 :(得分:2)
'volt'不是成员变量 - 它是文件局部变量。只有其中一个。使它成为一个成员变量(把它放在课堂上),你的问题就会消失。
类似的东西:
class Neuron {
private:
int volt;
};
在构造函数中,设置它的初始值:
Neuron::Neuron(QWidget *parent) : QWidget(parent), ui(new Ui::Neuron), volt(5)
{ /* existing code */ }