2016-08-04 24 views
0

ich eine mit Maske als HH:mm ein Szenario vor gesetzt haben, wo Benutzer Löschungen (zum Beispiel) Stunde Abschnitt wie folgt aus:QDateTimeEdit - Stunden/Minuten Abschnitte setzt zu leeren, wenn der Fokus verloren

enter image description here

Wenn Der Benutzer leert den Stundenabschnitt und drückt anschließend die Eingabetaste. Der Stundenabschnitt wird auf 00 zurückgesetzt (ist das erwartete Verhalten, immer).

enter image description here

Wenn Benutzer die Stunde Abschnitt leert und nur woanders klicken (wenn verliert es Fokus ist), Stunden Abschnitt bleibt leer, was mein Problem ist.

enter image description here

Kann mir jemand andeuten mit einem Weg, um dieses Problem zu lösen?

Antwort

1

interpretText() Funktion macht den Trick. Sie müssen interpretText() der QDateTimeEditor in der setModelData Funktion (in Ihrer Delegate-Klasse) aufrufen, bevor Sie auf den Text zugreifen.

Nach Qt documentation

Diese Funktion interpretiert den Text des Drehfelds. Wenn der Wert seit der letzten Interpretation geändert wurde, werden Signale ausgegeben.

Beispiel:

void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, 
            const QModelIndex &index) const 
{ 
    QDateTimeEdit *dateTime = static_cast<QDateTimeEdit*>(editor); 
    dateTime->interpretText(); 
    model->setData(index, dateTime->text(), Qt::EditRole); 
} 
0

Mein Vorschlag ist es, eine Aktion zu erstellen, die mit dem Signal timeChanged verbinden und manuell die Zeit auf das richtige Format einstellen.

+1

Überprüfen Sie meine Antwort auf eine bessere Möglichkeit, dieses Problem der Festsetzung – warunanc