QDateTimeEdit Signal für eine Funktion

Alles rund um die Programmierung mit Qt
Antworten
RoninRobert
Beiträge: 6
Registriert: 10. September 2004 18:01

QDateTimeEdit Signal für eine Funktion

Beitrag von RoninRobert »

Hallo
Ich möchte das Datum, welches der User über die QDateTimeEdit Funktion eingeben kann an eine Funktion senden. Ich schreib mal am besten meinen Quelltext:
int jahr=2004;
int tag=26;
int monat=12;
class QLCDNumber;

class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent=0,const char *name=0);

public slots:
virtual void bla();

QDateTimeEdit* dateTimeEdit1;
};

MyWidget::MyWidget( QWidget *parent, const char *name)
:QWidget(parent,name)
{
setMinimumSize(220,120);
setMaximumSize(500,120);
....
dateTimeEdit1 = new QDateTimeEdit( this,"dateTimeEdit1" );
dateTimeEdit1->setGeometry( QRect( 10, 60, 150,20 ) );
dateTimeEdit1->setDateTime( QDateTime( QDate( jahr,monat,tag ),QTime( 14, 10, 0 ) ) );

connect(dateTimeEdit1,SIGNAL(valueChanged(const QDateTime&)),this,SLOT(bla()));
}
void MyWidget::bla()
{
QDateTime la = dateTimeEdit1->dateTime();
::tag = atoi(la.toString("dd"));
::jahr= atoi(la.toString("yyyy"));
::monat= atoi(la.toString("MM"));
}
Ich möchte also die globalen integer Variablen tag,jahr und monat auf die vom User eingestellten Werte ändern. Könnt ihr mir vielleicht helfen?
danke schon mal im Vorraus

Liebe Grüße

Robert
Schiffchen
Beiträge: 7
Registriert: 22. Oktober 2004 15:47

Beitrag von Schiffchen »

Hi Robert,

versuch mal das!

Code: Alles auswählen

int jahr=2004; 
int tag=26; 
int monat=12; 
class QLCDNumber; 

class MyWidget : public QWidget 
{ 
public: 
MyWidget(QWidget *parent=0,const char *name=0); 

public slots: 
virtual void bla(const QDateTime& dateTime); 

QDateTimeEdit* dateTimeEdit1; 
}; 

MyWidget::MyWidget( QWidget *parent, const char *name) 
:QWidget(parent,name) 
{ 
setMinimumSize(220,120); 
setMaximumSize(500,120); 
.... 
dateTimeEdit1 = new QDateTimeEdit( this,"dateTimeEdit1" ); 
dateTimeEdit1->setGeometry( QRect( 10, 60, 150,20 ) ); 
dateTimeEdit1->setDateTime( QDateTime( QDate( jahr,monat,tag ),QTime( 14, 10, 0 ) ) ); 

connect(dateTimeEdit1,SIGNAL(valueChanged(const QDateTime&)),this,SLOT(bla(const QDateTime&))); 
} 
void MyWidget::bla(const QDateTime& dateTime) 
{ 
QDateTime la = dateTime; 
tag = dateTime.dateEdit().date().day();
monat = dateTime.dateEdit().date().month();
jahr = dateTime.dateEdit().date().year(); 
} 

MfG
Schiffchen
Beiträge: 7
Registriert: 22. Oktober 2004 15:47

Beitrag von Schiffchen »

Ups, kleiner Fehler!

Code: Alles auswählen

QDateTime la = dateTime; 
tag = la.dateEdit().date().day();
monat = la.dateEdit().date().month();
jahr = la.dateEdit().date().year(); 
MfG
RoninRobert
Beiträge: 6
Registriert: 10. September 2004 18:01

Beitrag von RoninRobert »

Hi danke erstmal für die Antwort, allerdings bekomme ich die Meldung, dass dateEdit() unbekannt ist und die Fehlermeldung:
No such slot QWidget::bla(const QDateTime&)
Hast du da noch eine Idee? Hab vor kurzem mit qt angefangen und komm nicht so wirklich damit klar!
Mfg Robert
Schiffchen
Beiträge: 7
Registriert: 22. Oktober 2004 15:47

Beitrag von Schiffchen »

Hi Robert,

tja man sollte das Programm am besten immer vorher selber ausprobieren, bevor man es hier ins Forum gibt. Tut mir leid, waren noch ein paar Fehler drinnen.
Jetzt funktioniert es aber prima:

Hier die Header:

Code: Alles auswählen

#ifndef _FORM1EDITOR
#define _FORM1EDITOR



#include <qdatetime.h>


class Form1Editor : public Form1

{
	Q_OBJECT

public:
	Form1Editor();
	~Form1Editor();
	

signals:

private slots:
	void bla(const QDate& dateTime); 

private:
                QDateTimeEdit* dateTimeEdit1;
 
};

#endif  _FORM1EDITOR
und hier dat Programm:

Code: Alles auswählen

#include "form1editor.h"

#include <qdatetime.h>
#include <qdatetimeedit.h>

int jahr=2004; 
int tag=26; 
int monat=12;

Form1Editor::Form1Editor ()
{
	connect(dateTimeEdit1->dateEdit(),SIGNAL(valueChanged(const QDate & )),this,SLOT(bla(const QDate &))); 
}

Form1Editor::~Form1Editor()
{
}

void Form1Editor::bla(const QDate& dateTime) 
{ 
	QDate la = dateTime; 
	tag = la.day(); 
	monat = la.month(); 
	jahr = la.year(); 
} 
MfG
Schiffchen
Beiträge: 7
Registriert: 22. Oktober 2004 15:47

Beitrag von Schiffchen »

Kann uebrigens sein, dass da mit den Headerdateien nicht alles korrekt ist. Ich programmier immer in mehreren Dateien und mit dem Designer. Wenn nicht laeuft, vergiss nicht die #include <qdatetimeedit.h>!

so long
RoninRobert
Beiträge: 6
Registriert: 10. September 2004 18:01

Beitrag von RoninRobert »

Danke erstmal für deine Hilfe. Das Problem ist, dass ich das alles in ein größeres Programm einbauen will und ich da immer noch das Problem bekomme:
No such slot QWidget::bla(const QDate&)
Bei deinem Programm bekomme ich ich auch ein Haufen Fehlermeldungen. Könntest du mir vielleicht die .ui und die .ui.h schicken? Komm einfach nicht weiter. Vielen Dank jedenfalls nochmal.
Robert
RoninRobert
Beiträge: 6
Registriert: 10. September 2004 18:01

Beitrag von RoninRobert »

Hallo hab jetzt den Fehler gefunden, warum er die SLOTS nicht gefunden hatte. Hatte Q_Object nicht drinn. Jetzt bekomme ich, wenn ich mit dem Befehl: g++ date2.cpp -Wall -I/usr/lib/qt3/include -L/usr/lib/qt3/lib -lqt-mt
aber folgende Fehler:
/tmp/cczIpDsc.o(.text+0x22): In function `MyWidget::MyWidget[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
/tmp/cczIpDsc.o(.text+0x2e): In function `MyWidget::MyWidget[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
/tmp/cczIpDsc.o(.text+0xd90): In function `MyWidget::MyWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
/tmp/cczIpDsc.o(.text+0xd9c): In function `MyWidget::MyWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
/tmp/cczIpDsc.o(.text+0x1b00): In function `MyWidget::languageChange()':
: undefined reference to `MyWidget::tr(char const*, char const*)'
/tmp/cczIpDsc.o(.gnu.linkonce.t._ZN8MyWidgetD1Ev+0xb): In function `MyWidget::~MyWidget [in-charge]()':
: undefined reference to `vtable for MyWidget'
/tmp/cczIpDsc.o(.gnu.linkonce.t._ZN8MyWidgetD1Ev+0x17): In function `MyWidget::~MyWidget [in-charge]()':
: undefined reference to `vtable for MyWidget'
collect2: ld returned 1 exit status
Hab in einem anderen Forum gefunden, dass ich die Datei mit KDevelop kompilieren soll, was auch funktioniert, nur möchte ich das Programm mit KDevelop erstellen, kommen ähnliche Fehler in der .o und .moc Datei. Kann mir bitte jemand weiterhelfen. In Qt einzusteigen ist echt kein Spaziergang.
Danke schon mal
Robert
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Hallo Robert

Ich entwickle zwar derweil unter Windows, aber das sieht sehr bekannt aus. Hast Du darauf geachtet, dass eine Datei, die Q_OBECTS enthält auch mit dem moc - Compiler bearbeitet werden muss (Projekt Einstellung für diese Datei)

Für Visual C++ gibt es von Qt ein kleines Makro (Toolbutton), mit dem man eine solche Header Datei einfach moc'en kann. Es werden automatisch die Projekteinstellungen für diese Datei angepasst, so dass das dieser Vorgang für jede Datei nur einmal nötig ist.

Dabei werden m.E. zusätzliche moc_***.cpp dateien erzeugt, die in das Projekt eingebunden und kompiliert werden (müssen). Die enthalten dann den Programmcode, der hier wahrscheinlich vermisst wird.

Ich hoffe ich verbreite nicht Allgemeinplätze (zumal ich derzeit nicht unter KDevelob entwickle)

Gruss Arne
Antworten