Leeres QDateEdit Widget

Alles rund um die Programmierung mit Qt
Antworten
Thomas Walther
Beiträge: 7
Registriert: 5. September 2005 22:01

Leeres QDateEdit Widget

Beitrag von Thomas Walther »

Hallo Leute,

ich benutze Qt4

Folgende Anforderung hat sich ergeben:
In einer Maske soll ein Geb.-Datum eigegeben werden, dieses Feld
(ich dachte an QDateEdit) soll aber anfangs leer sein.
Das lässt sich aber nicht so darstellen: __.__.____ ?

Hat jemand ne Idee ?
Gruss TW.
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

also mit dem QDateEdit gehts nicht, Wenn du aber ein LineEdit nimmst und die inputMask auf

Code: Alles auswählen

00:00:0000;_
setzt, siehts genauso aus wie du es willst.
mit _ werden die Leerräume ausgefüllt. lässt du es leer, sind es Leerzeichen.
Thomas Walther
Beiträge: 7
Registriert: 5. September 2005 22:01

Leeres QDateEdit Widget

Beitrag von Thomas Walther »

Hallo,
vielen Dank für die Lösung.

Da muss ich ja den fleissigen Programmierer in mir wecken,
die Fehleingaben (von wegen 32.12.07 oder 31.09.07) abfangen
und gleich ne Aenderung vorschlagen(zB Korrektur zu 30.09.07 usw).

Hat das schon mal jemand gemacht ? Ev. kann mir da jemand
mit n bissel Code aushelfen?!

Vielen Dank, TW
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

spinbox neben das teil und dann einen slot wie folgt(noch nicht ausgereift, aber größtenteils klappts):

Code: Alles auswählen

connect(spinBox, SIGNAL(valueChanged(QString)), this, SLOT(setDate(QString)));

Code: Alles auswählen

void Test::setDate(const QString &number)
{
	QString tmp = lineEdit->displayText();
	qDebug() << tmp.toAscii();
	int pos = lineEdit->cursorPosition();
	
	int a = tmp.indexOf(':', pos);
	int b = tmp.lastIndexOf(':', pos);
	if(a <= 0)
		a = tmp.length();
	if(b <= 0)
		b = 0;
	
	int length = a - b;
	if(length == 2 && b == 0)
		spinBox->setMaximum(31);
	else if(length == 3 && b == 2)
		spinBox->setMaximum(12);
	else if(length == 5 && b == 5)
	{
		spinBox->setMinimum(1900);
		spinBox->setMaximum(2100);
	}
	qDebug() << "a:" << QByteArray::number(a);
	qDebug() << "b:" << QByteArray::number(b);
	qDebug() << "length:" << QByteArray::number(length);
	tmp.replace(b, length, number);
	lineEdit->setText(tmp);
	lineEdit->setSelection(b, length);
	lineEdit->setCursorPosition(pos);
}
Deever
Beiträge: 90
Registriert: 9. Mai 2007 18:20

Beitrag von Deever »

QLineEdit::setValidator(const QValidator *v) wäre eventuell einen Blick wert.

Gruß,
/dev
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

nein, nicht wirklich.
nicht in diesem fall. Hast du gesehen, dass QValidator immer nur für das ganze lineEdit gilt?
und wenn man das mit validate und fixUp macht, dann ist der aufwand der selbe wie der den ich getrieben habe...
Thomas Walther
Beiträge: 7
Registriert: 5. September 2005 22:01

Leeres QDateEdit Widget

Beitrag von Thomas Walther »

Vielen Dank fuer die Hilfe !!!

Ich werden es erst spaeter testen koennen.

Wenn ich was aendere stelle ich es dann hier ein.(kann etwas dauern)

M.f.G. an Alle, TW
Antworten