Optiemerungsprobleme bei langer If-Abfrage
-
#include <array> // ganz oben einfügen // Namen der Array-Elemente entsprechend anpassen std::array<QRadioButton*, 5> radioButtons = { radioButton1, radioButton2, radioButton3, radioButton4, radioButton5 }; // bzw. sinnvoller, wie DirkB geschrieben std::array<QCheckBox*, 5> checkBoxes = { checkBox1, checkBox2, checkBox3, checkBox4, checkBox5 };s.a. std::array
-
@SeppJ sagte in Optiemerungsprobleme bei langer If-Abfrage:
for (int i =0; i < 5; ++i) { if (not ui->radioButton[i]->isChecked()) ...Tja, mir kam auch gerade in den Sinn: Wenn man mit einer "If-Abfrage" nicht mehr weiterkommt, dann hilft eine "If-Schleife" ... SCNR

-
-
@Fragender sagte in Optiemerungsprobleme bei langer If-Abfrage:
Doch, das was @SeppJ da geschrieben hat, könnte man durchaus so nennen

-
Ich habe jetzt mal gebaut was funktioniert. Ich bin immer noch ein zeimlicher Neuling was Programmierung angeht und deshalb bitte ich euch einmal Stellung zu nehmen zu meinem Code. Was haltet ihr davon?
void NeuesFensterWuerfeln::on_pushButtonWuerfelnAusfuehren_clicked()
{
NeuesFensterWuerfeln *obj = this;if (runde ==1) { for (int i= 0;i<5;i++) { (obj->*wuerfelAusgeben[i])(); } QString info = "Bitte auswählen mit welchen Wuerfeln neu gewuerfelt werden soll!"; QMessageBox::information(this,"Information", info); runde = 2; return; } if (runde == 2) { for (int i = 0; i<5;i++) { if (radioButtons[i]->isChecked()) { (obj->*wuerfelAusgeben[i])(); } } }}
-
Da fehlt ein bisschen Information

Als erstes lässt sich das KonstruktNeuesFensterWuerfeln *obj = thiswegoptimieren, dann kannst du direkt mitthisarbeiten. Da du dich in einer Memberfunktion der KlasseNeuesFensterWuerfelnbefindest, kann du das dann auch noch wegoptimieren. Aus(obj->*wuerfelAusgeben[i])();wird damit(*wuerfelAusgeben[i])();Und da schrillen Alarmglocken, aber um mehr zu sagen müsste man wissen, waswuerfelAusgebenist.
-
wuerfelAusgeben ist mein Vector in dem ich meine Methoden zur visuellen Ausgabe des Würfels in einem Label gespeichert habe, um sie dann später über die Schleife wieder abrufen zu können.
QVector<void(NeuesFensterWuerfeln::*)()>wuerfelAusgeben;
NeuesFensterWuerfeln::NeuesFensterWuerfeln(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::NeuesFensterWuerfeln)
{
ui->setupUi(this);
srand(time(0));QRadioButton * ersterRadioButton = new QRadioButton(this); ersterRadioButton->setGeometry(150,50,100,100); ersterRadioButton->setText("Bitte anklicken falls Würfel stehen bleiben soll"); ersterRadioButton->setAutoExclusive(false); QRadioButton * zweiterRadioButton = new QRadioButton(this); zweiterRadioButton->setGeometry(150,150,100,100); zweiterRadioButton->setText("Bitte anklicken falls Würfel stehen bleiben soll"); zweiterRadioButton->setAutoExclusive(false); QRadioButton * dritterRadioButton = new QRadioButton(this); dritterRadioButton->setGeometry(150,250,100,100); dritterRadioButton->setText("Bitte anklicken falls Würfel stehen bleiben soll"); dritterRadioButton->setAutoExclusive(false); QRadioButton * vierterRadioButton = new QRadioButton(this); vierterRadioButton->setGeometry(150,350,100,100); vierterRadioButton->setText("Bitte anklicken falls Würfel stehen bleiben soll"); vierterRadioButton->setAutoExclusive(false); QRadioButton * fuenfterRadioButton = new QRadioButton(this); fuenfterRadioButton->setGeometry(150,450,100,100); fuenfterRadioButton->setText("Bitte anklicken falls Würfel stehen bleiben soll"); fuenfterRadioButton->setAutoExclusive(false); //radioButton in den Vector übergeben radioButtons.push_back(ersterRadioButton); radioButtons.push_back(zweiterRadioButton); radioButtons.push_back(dritterRadioButton); radioButtons.push_back(vierterRadioButton); radioButtons.push_back(fuenfterRadioButton); wuerfelAusgeben.push_back(&NeuesFensterWuerfeln::wuerfel1Ausgabe); wuerfelAusgeben.push_back(&NeuesFensterWuerfeln::wuerfel2Ausgabe); wuerfelAusgeben.push_back(&NeuesFensterWuerfeln::wuerfel3Ausgabe); wuerfelAusgeben.push_back(&NeuesFensterWuerfeln::wuerfel4Ausgabe); wuerfelAusgeben.push_back(&NeuesFensterWuerfeln::wuerfel5Ausgabe);}
-
@DocShoe
Sorry das oben stehende wollte ich eig. an dich richten hatte das @ setzen vergessen
-
Ah, ok. Ungewöhnlich.
Jetzt fehlt nur noch der Code vonwuerfel1Ausgabe. Ohne den gesehen zu haben vermute ich mal, dasswuerfel1Ausgabebiswuerfel5Ausgabeprinzipiell das Gleiche tun und nur von anderen Objekten abhängen.
-
Du kannst das Erstellen der 5
QRadioButtongleich in einer Schleife durchführen und sie in denvectorstecken (die y-Position kannst du ja einfach berechnen).
