Variable can't get a value
-
wrote on 18 Jun 2017, 11:41 last edited by Gluon666
So, I have this:
double A, B, C;
In my Window.h file and also some QComboBoxes and some QDoubleSpinBoxes like this:
QDoubleSpinBox *a; QDoubleSpinBox *b; QDoubleSpinBox *c; QComboBox *o1; QComboBox *o2; QComboBox *o3;
Then I use them like this:
if(o1->currentData(o1->currentIndex()) == 0) { A = a->value(); } else if(o1->currentData(o1->currentIndex()) == 1) { A = a->value(); A *= -1; } if(o2->currentData(o2->currentIndex()) == 0) { B = b->value(); } else if(o2->currentData(o2->currentIndex()) == 1) { B = b->value(); B *= -1; } if(o3->currentData(o3->currentIndex()) == 0) { C = c->value(); } else if(o3->currentData(o3->currentIndex()) == 1) { C = c->value(); C *= -1; }
(each QComboBox has 2 items, "+" and "-") but the A, B, C are always equal to 0, and I cannot figure out why.
Could you help me? Thanks in advance.
-
So, I have this:
double A, B, C;
In my Window.h file and also some QComboBoxes and some QDoubleSpinBoxes like this:
QDoubleSpinBox *a; QDoubleSpinBox *b; QDoubleSpinBox *c; QComboBox *o1; QComboBox *o2; QComboBox *o3;
Then I use them like this:
if(o1->currentData(o1->currentIndex()) == 0) { A = a->value(); } else if(o1->currentData(o1->currentIndex()) == 1) { A = a->value(); A *= -1; } if(o2->currentData(o2->currentIndex()) == 0) { B = b->value(); } else if(o2->currentData(o2->currentIndex()) == 1) { B = b->value(); B *= -1; } if(o3->currentData(o3->currentIndex()) == 0) { C = c->value(); } else if(o3->currentData(o3->currentIndex()) == 1) { C = c->value(); C *= -1; }
(each QComboBox has 2 items, "+" and "-") but the A, B, C are always equal to 0, and I cannot figure out why.
Could you help me? Thanks in advance.
wrote on 18 Jun 2017, 13:02 last edited by@Gluon666
Definition of function currentData is:QVariant currentData(int role = Qt::UserRole) const
So it take as an argument role and not index.
May be you should useif(o1->currentData() == 0)
or
if(o1->currentIndex() == 0)
instead both at the same time.
-
wrote on 18 Jun 2017, 18:30 last edited by Gluon666
I tried but still, A, B and C are equal to 0:
if(o1->currentIndex() == 0) { A = a->value(); } else if(o1->currentIndex() == 1) { A = a->value() * -1; }
I also tried with:
if(o1->itemData(o1->currentIndex()) == 0) { A = a->value(); } else if(o1->itemData(o1->currentIndex()) == 1) { A = a->value() * -1; }
But yeah, no better results...
Mayhaps, I thought that it could be the slot that I use that is not working properly:
delta = ((B * B) - (4 * (A * C))); if(delta > 0) { S1 = ((-B) + sqrt(delta) / (2 * A)); S2 = ((-B) - sqrt(delta) / (2 * A)); msg += "S = { "; msg += QString::number(S1); msg += " ; "; msg += QString::number(S2); msg += " }"; } else if(delta == 0) { S = (-B / (2 * A)); msg += "S = { "; msg += QString::number(S); msg += " }"; } else if(delta < 0) { msg = "Impossible"; } QObject::connect(calculate, SIGNAL(clicked(bool)), this, SLOT(displayMsg())); } void Window::displayMsg() { output->setText(msg); }
This is the actual code (you probably recognized an equation solver) and mybe its the msg that is corrupted or something. No errors while debbugging, though
-
I tried but still, A, B and C are equal to 0:
if(o1->currentIndex() == 0) { A = a->value(); } else if(o1->currentIndex() == 1) { A = a->value() * -1; }
I also tried with:
if(o1->itemData(o1->currentIndex()) == 0) { A = a->value(); } else if(o1->itemData(o1->currentIndex()) == 1) { A = a->value() * -1; }
But yeah, no better results...
Mayhaps, I thought that it could be the slot that I use that is not working properly:
delta = ((B * B) - (4 * (A * C))); if(delta > 0) { S1 = ((-B) + sqrt(delta) / (2 * A)); S2 = ((-B) - sqrt(delta) / (2 * A)); msg += "S = { "; msg += QString::number(S1); msg += " ; "; msg += QString::number(S2); msg += " }"; } else if(delta == 0) { S = (-B / (2 * A)); msg += "S = { "; msg += QString::number(S); msg += " }"; } else if(delta < 0) { msg = "Impossible"; } QObject::connect(calculate, SIGNAL(clicked(bool)), this, SLOT(displayMsg())); } void Window::displayMsg() { output->setText(msg); }
This is the actual code (you probably recognized an equation solver) and mybe its the msg that is corrupted or something. No errors while debbugging, though
wrote on 18 Jun 2017, 19:45 last edited by Stoyan@Gluon666
How do you know that A, B and C are equal to 0? If they are, then your program will give error when you click on "calculate" - "Division by zero".
Could you put some debug statements in your code?
Like this:qDebug() << "A: " << A << "\tB: " << B << "\tC: " << C; delta = ((B * B) - (4 * (A * C)));
1/4