Timerfunktion einbauen???

Alles rund um die Programmierung mit Qt
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Timerfunktion einbauen???

Beitrag von Melvin71 »

Hallo,
ich bin noch echt neu was QT und überhaupt C++ angeht, daher benötige ich an dieser Stelle etwas Hilfe.
Ich bin grad dabei ein kleines Quiz zu erstellen, dabei muss ich, damit nach der Beantwortung einer Frage,
das Programm nicht gleich und sofort zur nächsten übergeht, einen Timer oder sowas einbauen. Korrigiert
mich wenn ich da falsch liege^^. Ich habe mich auch schon in einigen Foren umgesehen, Google hat mir die
Antwort auch nicht gebracht. Kann mir bitte jemand den Code für einen Timer oder sowas posten? Besten
Dank schon mal im vorras.
MFG
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

http://qt-project.org/doc/qt-4.8/qtimer.html#details
Mit Beispielen ;)

Ansonsten solltest vl genauer Beschreiben was du machen willst. :)

Mfg veeman
Zuletzt geändert von veeman am 16. März 2013 01:33, insgesamt 1-mal geändert.
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

Hallo,
ja ich habe mich da glaube ich schon ein wenig undeutlich ausgedrückt, was ich suche ist nicht direkt eine
Timerfunktion, sondern sowas wie eine Wait-Funktion. So dass der Übergang zur nächsten Frage verzögert
wird.^^
MFG
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Wie Zeigst du die Frage an? In einem QLabel?
Wie wird die Antwort beantwortet? Über nen Button?
Oder Arbeitest du mit der Console?

Es gibt kein direkte wait Funktion, du kannst halt auf Benutzeringaben reagieren.

Mfg veeman
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

also ich seh schon, dass ich echt noch genauer meine Fragen stellen muss^^ daher hier mein Quellcode... hoffe es ist ok, dass ich ihn hier poste...
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
frage = 1;
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_bestaetigen_clicked()
{
bool eins = ui->radioButton->isChecked();
bool zwei = ui->radioButton_2->isChecked();
bool drei = ui->radioButton_3->isChecked();

qDebug() << "radiobutton_1" + eins;
qDebug() << "radiobutton_2" + zwei;
qDebug() << "radiobutton_3" + drei;

if(eins == true && frage == 1) //Simpsons
{
ui->ergebnis->setText("richtig");
frage = 2;
frage_2();

qDebug() << frage;

}
else
{
ui->ergebnis->setText("falsch");
qDebug() << "sompsons falsch";
}

if (eins == true && frage == 2)
{
ui->ergebnis->setText("richtig"); //Periodensystem
frage = 3;
frage_3();

}
else
{
ui->ergebnis->setText("falsch");
qDebug() << "periodensystem";
}

}

void MainWindow::frage_2()
{
ui->frage->setText("Wie heisst die Tabelle, in der die Elemente aufgelistet sind?");
ui->radioButton->setText("Kochbuch");
ui->radioButton_2->setText("Bibel");
ui->radioButton_3->setText("Periodensystem");
}

void MainWindow::frage_3()
{
ui->frage->setText("Wieviele Episoden von Star Wars gibt es?");
ui->radioButton->setText("4");
ui->radioButton_2->setText("6");
ui->radioButton_3->setText("9");
}

void MainWindow::frage_4()
{
ui->frage->setText("Wieviele Episoden von den Simpsons gibt es?");
ui->radioButton->setText("40");
ui->radioButton_2->setText("125");
ui->radioButton_3->setText("15");
}
so sieht das bis jetzt aus... wie gesagt, stehe noch am Anfang und lerne erst noch :D
bin daher für jede Hilfe die ich bekommen kann sehr dankebar.
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

Ergänzung: nehmt die Fragen und auch die Antworten nicht allzu ernst... sind einfach nur so dahin geschmiert, als Platzhalter sozusagen^^
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Code ist immer gern gesehen, wenn allzu lang ist dann am besten kürzen und in einen CODE-Tag einbinden.

Jetzt versteh ich was du meinst. Geht auch mit dem oben erwähntem Timer, dein Grundgerüst ist perfekt und muss nicht allzu viel verändert werden.

Einfach deine Funktionen frag_X als slot im Header definieren und anschliessend kannst du mit dem folgendem Code Zeitversetzt die jeweilige Funktion aufrufen:

Code: Alles auswählen

...
ui->ergebnis->setText("richtig");
frage = 2;
QTimer::singleShot(5000, this, SLOT(frage_2())); // Funktion nach 5s Aufrufen
...
Mfg veeman
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

Danke für den Timer, das funktioniert richtig klasse, bei dem Code bisher hatte ich ein wenig Hilfe von einem
Freund^^.
hmm frag_x im header definieren? wie gesagt, bin noch anfänger^^
nun tut sich aber ein weiteres Problem auf. . . die Radiobuttons bleiben immer angewählt.
Soll heissen, der Button, den ich als letzes aktiviert habe, bleibt auch makiert wenn ich
schon bei der nächsten Frage bin...wie "löscht" man das?
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Wenn der Timer schon geht dann brauchst das nicht im Header (das ist eine gleichnahmige Datei wie die .cpp nur mit .h) zu ändern. ;)

Den Auswahlstatus soltlest du mittel setChecked(bool) setzen können. Ggf. ist es Sinnvoll die Radiobuttons zu gruppieren.

Mfg veeman
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

das mit dem bool eins = ui->radioButton->isChecked(); habe ich ja schon drin.
nur ist der Button immer noch makiert mit der vorherigen Antwort, das möchte ich
unterbinden. Wenn die nächste Frage gestellt wird, sollen alle Buttons wieder leer sein.
Das bekomme ich nicht, obwohl ich immer dachte, Google weiss alles, musste ich mich
in dieser Sache korrigieren^^
MFG


PS: und besten Dank, dass immer so schnelle und sehr hilfreiche Antworten kommen!!!
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Ja das ist klar und mit setChecked (!=ischecked) kannst wieder deaktivieren:

Code: Alles auswählen

 ui->radioButton->setChecked(false)
mfg
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

leider muss ich da nochmal nachfragen, wie baue ich diese code genau in meinen ein?
habe etwas rumprobiert, klappt aber leider nicht.
MFG
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Naja genauso wie du den text änders deaktivierst du die Radiobuttons auch.

Code: Alles auswählen

ui->radioButton->setChecked(false);
ui->radioButton_2->setChecked(false);
ui->radioButton_3->setChecked(false);
mfg
Melvin71
Beiträge: 16
Registriert: 25. Februar 2013 01:07

Re: Timerfunktion einbauen???

Beitrag von Melvin71 »

Ersetze ich denn die zeilen
bool eins = ui->radioButton->isChecked();
bool zwei = ui->radioButton_2->isChecked();
bool drei = ui->radioButton_3->isChecked();
durch die mit false?

mr isr manchmal nicht so ganz klar, an welche stelle ich was einfügen muss^^

MFG
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Timerfunktion einbauen???

Beitrag von veeman »

Nein du sollst es nicht ersetzen.
Du kannst den Code zb. nach den Zuweisungen machen.

Code: Alles auswählen

// auswahl einlesen
bool eins = ui->radioButton->isChecked();
bool zwei = ui->radioButton_2->isChecked();
bool drei = ui->radioButton_3->isChecked();

// auswahl löschen
ui->radioButton->setChecked(false);
ui->radioButton_2->setChecked(false);
ui->radioButton_3->setChecked(false);

if(eins == true && frage == 1) //Simpsons
....
Ich empfehle dir Dringend die Basics anzuschauen. Zb:C von A bis Z
Was ist ein bool, was ist ein int, was ist eine Funktion und wie ist diese Aufgebaut ...

mfg
Antworten