Seite 1 von 1

Uhrzeit in einem QLabel anzeigen

Verfasst: 10. Januar 2007 13:53
von Hulk2442
HI
Ich möchte mir die Uhrzeit anzeigen lassen.
Dies sollte in einem QLAbel dargestellt werden.
Es ist jedoch notwendig dass ich von einer andre Klasse auf diese zugreifen kann.

Dazu habe ich folgende code zusammengeschrieben.
Leider aktualisiert sich die Uhrzeit nicht.
TIA für Vorschläge!

digitalclock.h

Code: Alles auswählen

#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H

#include <QLabel>

class DigitalClock
{
	Q_OBJECT

	public:
		DigitalClock(QWidget *parent = 0);
		QLabel *wid();
		QString text;

	private slots:
		void showTime();
};

#endif
Digitalclock.cpp

Code: Alles auswählen

#include <QtGui>
#include "digitalclock.h"
#include <QLabel>

DigitalClock::DigitalClock(QWidget *parent):
{
	QTimer *timer = new QTimer(this);
	connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
	timer->start(1000);

	showTime();
}

void DigitalClock::showTime()
{
	QTime time = QTime::currentTime();
	text = time.toString("hh:mm:ss");
}

QLabel *DigitalClock::wid()
{
	QLabel *label = new QLabel();
	label->setText(text);
	return label;
}
Main

Code: Alles auswählen

#include <QApplication>
#include "digitalclock.h"
#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	DigitalClock clock;
	
	QWidget *widget = new QWidget();
	QHBoxLayout *HLayout = new QHBoxLayout;
	
	HLayout->addWidget(clock.wid());
	widget->setLayout(HLayout);
	widget->show();

//	clock.show();
	return app.exec();
}


Für die welche die Tutorial kenne, kenn auch sicherlich den hauptteil diese codes.
TIA

Verfasst: 10. Januar 2007 14:47
von Christian81
Und wo wird der neue Text im QLabel gesetzt?

Verfasst: 10. Januar 2007 14:54
von Hulk2442
Stimmt!
Könntest du mir bitte weiterhelfen wie ich diese bewerkstellige?

Verfasst: 10. Januar 2007 14:59
von Christian81
Ich würde mal sagen mit QLabel::setText(), oder?

Verfasst: 10. Januar 2007 15:17
von Hulk2442
Qlabel::setText() benutze ich ja auch um das erste mal die Zeit (als QString) in das QLabel zu speichern.
Jedoch bleibt es dann dabei.

Code: Alles auswählen

QLabel *DigitalClock::wid()
{
   QLabel *label = new QLabel();
   label->setText(text);
   return label;
} 
Lasse ich „main“ in einer Schleife laufen erhalte ich logischerweise anstelle eines neune Inhaltes ein neues Widget mit neuen Label und erst da drinnen die neue Zeit.

Die Frage welche sich stellt ist wie ich die „neuen Zeit“ in das bestehende QLabel hinein bekomme.

Verfasst: 10. Januar 2007 15:34
von Christian81
Indem Du C++ - Grundlagen lernst...
Das erzeugte Label als Member deiner Klasse und schon kannst Du später darauf zugreifen.

Verfasst: 10. Januar 2007 15:51
von Hulk2442
Trotzdem bleibt meine Frage bestehen!
Denn auch wenn ich QLabel als

Code: Alles auswählen

class DigitalClock : public QLabel 
anfüge wird die Zeit nur ein einziges mal angezeigt (Zeitpunkts des ersten ausführens) und bleibt danach stehen.
Und solche Antworten wie:“Indem Du C++ - Grundlagen lernst... „ sind sehr Kontraproduktiv!
Das ich es nicht besser weiß ist mir klar sonst würde ich ja nicht fragen!

Verfasst: 10. Januar 2007 16:12
von Christian81
Wie man sieht hast Du keine C++-Kenntnisse, und das hier ist ein Forum das C++ zwingend vorraussetzt - also ist meine Kritik berechtigt.

Code: Alles auswählen

class DigitalClock
{
   Q_OBJECT

   public:
      DigitalClock(QWidget *parent = 0);
      QLabel *wid();
      QString text;

   private slots:
      void showTime();
  protected:
      QLabel *m_label;
};


void DigitalClock::showTime()
{
   QTime time = QTime::currentTime();
   text = time.toString("hh:mm:ss");
   m_label->setText(text);
}

QLabel *DigitalClock::wid()
{
   m_label = new QLabel();
   m_label->setText(text);
   return m_label;
}