Du bist neu in der Welt von C++? Dann schau hier herein!
PyCoder
Beiträge: 18 Registriert: 4. April 2010 08:35
Beitrag
von PyCoder » 24. Januar 2011 13:16
Hi
Ich hab ein kleines Problem mit nem sehr einfachen "Wecker" und zwar Crasht mir "alert->stop()" und "alertTimer->stop()" das App und ich komm einfach nicht drauf wieso.
Da ich nicht so bewandert oder gut in C++ bin wollte ich mal fragen ob mir jemand sagen kann wieso
Code: Alles auswählen
#include <QtGui>
#include "clock.h"
#include "ui_clock.h"
#include <QDebug>
Clock::Clock() {
ui.setupUi(this);
// Orginal Palette
QPalette palette = ui.clockTime->palette();
// Timer Objects
QTimer* clockTimer = new QTimer(this);
QTimer* alertTimer = new QTimer(this);
alertTimer->setInterval(1000);
// Singals and Slots
connect(clockTimer, SIGNAL(timeout()), this, SLOT(showTime()));
connect(alertTimer, SIGNAL(timeout()), this, SLOT(checkAlert()));
connect(ui.buttonBox, SIGNAL(accepted()), alertTimer, SLOT(start()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(stopAlert()));
clockTimer->start(1000);
showTime();
}
void Clock::showTime() {
QTime time = QTime::currentTime();
QString text = time.toString("hh:mm");
ui.clockTime->display(text);
}
void Clock::checkAlert() {
qDebug() << "Armed!";
QTime time = QTime::currentTime();
QString text = time.toString("hh:mm:ss");
QPalette alertPalette = ui.clockTime->palette();
alertPalette.setColor(QPalette::Normal, QPalette::Foreground, Qt::red);
if (checkDay() && text == ui.alertTime->text()) {
qDebug() << "ALERT";
ui.clockTime->setPalette(alertPalette);
playSound();
}
}
void Clock::stopAlert() {
alert->stop();
alertTimer->stop();
ui.clockTime->setPalette(palette);
}
void Clock::playSound() {
//qDebug() << QSound::isAvailable();
qDebug() << "playSound";
QSound* alert = new QSound("bell.wav",this);
//alert->setLoops(360);
alert->play();
}
bool Clock::checkDay() {
QDate day;
//qDebug() << day.shortDayName(day.dayOfWeek());
switch (day.dayOfWeek()) {
case 1:
if (ui.Mon->isChecked()) {
return true;
}
case 2:
if (ui.Tue->isChecked()) {
return true;
}
case 3:
if (ui.Wed->isChecked()) {
return true;
}
case 4:
if (ui.Thur->isChecked()) {
return true;
}
case 5:
if (ui.Fri->isChecked()) {
return true;
}
case 6:
if (ui.Sat->isChecked()) {
return true;
}
case 7:
if (ui.Sun->isChecked()) {
return true;
}
default: return false;
}
}
Code: Alles auswählen
#ifndef CLOCK_H
#define CLOCK_H
#include <ui_clock.h>
#include <QSound>
class Clock: public QDialog {
Q_OBJECT
public:
Clock();
~Clock() {};
private:
Ui::Dialog ui;
QTimer* alertTimer;
QPalette palette;
QSound* alert;
private slots:
void showTime();
bool checkDay();
void checkAlert();
void playSound();
void stopAlert();
};
#endif // CLOCK_H
Zuletzt geändert von
PyCoder am 24. Januar 2011 15:32, insgesamt 1-mal geändert.
solarix
Beiträge: 1133 Registriert: 7. Juni 2007 19:25
Beitrag
von solarix » 24. Januar 2011 13:20
PyCoder hat geschrieben: Hi
Ich hab ein kleines Problem mit nem sehr einfachen "Wecker" und zwar Crasht mir "alert->stop()" und "alertTimer->stop()" das App und ich komm einfach nicht drauf wieso.
Worauf zeigt denn "alert" (leider nicht dorthin wo du denkst)?
PyCoder
Beiträge: 18 Registriert: 4. April 2010 08:35
Beitrag
von PyCoder » 24. Januar 2011 14:00
solarix hat geschrieben: PyCoder hat geschrieben: Hi
Ich hab ein kleines Problem mit nem sehr einfachen "Wecker" und zwar Crasht mir "alert->stop()" und "alertTimer->stop()" das App und ich komm einfach nicht drauf wieso.
Worauf zeigt denn "alert" (leider nicht dorthin wo du denkst)?
Ist doch korrekt? "QSound* alert = new QSound("bell.wav",this); "
Aber auch "alertTimer->stop()" lässt die App crashen...
Also hilft mir die spärchliche Info nicht viel weiter :/
jerry42
Beiträge: 126 Registriert: 9. Oktober 2008 10:48
Beitrag
von jerry42 » 24. Januar 2011 14:06
Du musst die Gültigkeit deiner Variablen anschauen.
Im Konstruktor arbeitest Du mit einer lokalen Variablen und in den anderen Methoden mit den Membern.
Das heißt z.B. in der Methode "void Clock::stopAlert()"
ist alert gar nicht initialisiert.
PyCoder
Beiträge: 18 Registriert: 4. April 2010 08:35
Beitrag
von PyCoder » 24. Januar 2011 14:35
jerry42 hat geschrieben: Du musst die Gültigkeit deiner Variablen anschauen.
Im Konstruktor arbeitest Du mit einer lokalen Variablen und in den anderen Methoden mit den Membern.
Das heißt z.B. in der Methode "void Clock::stopAlert()"
ist alert gar nicht initialisiert.
Du meinst also this->alert->stop()?
Das funzt auch ned... Die App crasht...
Zeig mal bitte in funktionierendem Code
jerry42
Beiträge: 126 Registriert: 9. Oktober 2008 10:48
Beitrag
von jerry42 » 24. Januar 2011 14:46
nein, wir meinen, dass du im Konstruktor, die Member Variable initialisieren sollst und nicht eine lokale Variable:
also nicht so:
// Timer Objects
QTimer* clockTimer = new QTimer(this);
QTimer* alertTimer = new QTimer(this);
sondern:
clockTimer = new QTimer(this);
alertTimer = new QTimer(this);
das gleiche mit alert in "void Clock::playSound()"
alert = new QSound("bell.wav",this);
PyCoder
Beiträge: 18 Registriert: 4. April 2010 08:35
Beitrag
von PyCoder » 24. Januar 2011 15:12
jerry42 hat geschrieben: nein, wir meinen, dass du im Konstruktor, die Member Variable initialisieren sollst und nicht eine lokale Variable:
Also ich hab jetzt den Code geändert auf:
Code: Alles auswählen
#ifndef CLOCK_H
#define CLOCK_H
#include <ui_clock.h>
#include <QSound>
#include <QTimer>
class Clock: public QDialog {
Q_OBJECT
public:
Clock();
~Clock() {};
private:
Ui::Dialog ui;
QTimer clockTimer;
QTimer alertTimer;
QPalette palette;
QSound alert;
private slots:
void showTime();
bool checkDay();
void checkAlert();
void playSound();
void stopAlert();
};
#endif // CLOCK_H
und
Code: Alles auswählen
// Timer Objects
clockTimer = new QTimer(this);
alertTimer = new QTimer(this);
//alertTimer->setInterval(1000);
und
Code: Alles auswählen
void Clock::playSound() {
//qDebug() << QSound::isAvailable();
alert = new QSound("bell.wav",this);
qDebug() << "playSound";
//alert->setLoops(360);
//alert->play();
}
Jetzt erhalt ich nur noch Fehlermeldungen im qtcreator -.-'
Selbst das Beispiel von Qt funktioniert nicht -.-'
http://doc.trolltech.com/3.3/sound-example.html (Jaja, veraltet)
Herzogswalder
Beiträge: 79 Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden
Beitrag
von Herzogswalder » 24. Januar 2011 15:19
Sorry, aber lerne bitte erstmal die C++-Grundlagen, bevor du mit Qt beginnst, denn Qt setzt solche Kentnisse voraus.
Gruß, Herzogswalder
Qt 4.8, OS X Mountain Lion
PyCoder
Beiträge: 18 Registriert: 4. April 2010 08:35
Beitrag
von PyCoder » 24. Januar 2011 15:24
Herzogswalder hat geschrieben: Sorry, aber lerne bitte erstmal die C++-Grundlagen, bevor du mit Qt beginnst, denn Qt setzt solche Kentnisse voraus.
Sorry, Qt ist nicht das Problem denn ich komm von PyQt...
Das Problem ist das sogar die Dokumentation fehlerhaft und mangelhaft ist!
Einzige Beispiel:
http://doc.trolltech.com/3.3/sound-example.html
Dort werden die Klassenmember auch nicht als Zeiger deklariert und so hab ichs halt auch gemacht...
War wohl der Fehler...
Aufjedenfall gehts jetzt...
Danke an jerry42
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 24. Januar 2011 16:06
Das ist Qt3 und außerdem sind das statische Funktionen die da aufgerufen werden... - nix mit new ...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung