2017-03-02 4 views
0

Ich habe ein QDateTimeEdit und Benutzer sollte ein Datum mit ihm auswählen. Allerdings muss ich den letzten Tag jedes Monats auswählen. Wenn der Benutzer beispielsweise den 3. März auswählt, sollte das Datum auf den 31. März festgelegt werden.QDateTimeEdit Wählen Sie den letzten Tag jedes Monats

Ich versuche, diese in den Schlitz des dateChanged(const QDate&) Signal zu tun. Aber wenn ich die Funktion setDate() aufrufen, wird der Slot erneut aufgerufen. Hier

ist der Beispielcode

connect(m_pDateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(OnDateChanged(const QDate&))); 

void MyClass::OnDateChanged(const QDate& date) 
{ 
    const bool b = m_pDateEdit->blockSignals(true); 

    // THIS LINE CAUSES TO THIS SLOT TO BE CALLED TWICE 
    m_pDateEdit->setDate(QDate(date.year(), date.month(), date.daysInMonth())); 
    CallSomeFunction(); 

    m_pDateEdit->blockSignals(b) 
} 

Alles, was ich vermisst habe? Irgendwelche Ideen?

Vielen Dank für Ihre Zeit!

Antwort

0

EDIT: da Sie nicht nur eine Trennung tun kann ich würde Ihnen raten, einen Kontrolleur statt, und entfernen Sie die Verbindungs ​​machen. Sie können das tun:

im Konstruktor:

QTimer::singleShot(30, this, SLOT(checkDateChanged())); 

Dann in der Klasse:

void MyClass::checkDateChanged() 
{ 
    if (pDateEdit->day() != pDateEdit->daysInMonth()) 
    { 
     m_pDateEdit->setDate(QDate(date.year(), date.month(), date.daysInMonth())); 
    } 
    CallSomeFunction(); 
    QTimer::singleShot(30, this, SLOT(checkDateChanged())); // this will create a loop called every 30 ms. 

} 
+0

Eigentlich habe ich versucht, das so gut, aber irgendwie Schlitz wieder aufgerufen werden. – nabroyan

+0

ok Ich werde es mit einer besseren Antwort aktualisieren. (es wäre einfacher zu testen, wenn Sie mir den Code geben, aber sonst ist das auch in Ordnung) –

+0

Eigentlich hast du mir eine Idee gegeben. Ich trenne meinen Signal-Slot, rufe 'setDate()' auf und rufe 'singleShot()' auf, was meinen Signal-Slot wieder verbindet. – nabroyan

Verwandte Themen