Seite 1 von 1

Leeres QDateEdit Widget

Verfasst: 15. Oktober 2007 22:42
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.

Verfasst: 16. Oktober 2007 07:28
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.

Leeres QDateEdit Widget

Verfasst: 16. Oktober 2007 08:36
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

Verfasst: 16. Oktober 2007 08:47
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);
}

Verfasst: 16. Oktober 2007 08:53
von Deever
QLineEdit::setValidator(const QValidator *v) wäre eventuell einen Blick wert.

Gruß,
/dev

Verfasst: 16. Oktober 2007 09:43
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...

Leeres QDateEdit Widget

Verfasst: 16. Oktober 2007 11:59
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