2011-04-01 86 views
0

我已經創建了一個日期輸入的子類化QLineEdit和QCalendar。當接收到mousePressEvent時,日曆顯示在QLineEdit的底部。問題在於隱藏該日曆。我已經重寫了focusOutEvent,因爲當用戶點擊其他地方時,我想讓它關閉。但是這個事件根本沒有收到,我通過在其中放置一個斷點來證實這一點,它從來沒有停止過。我已經把調用close()它:QWidget focusOutEvent沒有收到

class MyCalendarWidget : public QCalendarWidget 
{ 
    Q_OBJECT 

public: 
    void focusOutEvent(QFocusEvent* e) 
    { 
     close(); 
    } 
}; 

當我關閉它從我的DateLineEdit,它按預期工作:

void DateLineEdit::mousePressEvent(QMouseEvent *) 
{ 
    if (calendar->isVisible()) 
    { 
     calendar->close(); 
    } 
    else 
    { 
     calendar->move(mapToGlobal(QPoint(0, height()))); 
     calendar->show(); 
    } 
} 

回答

1

我猜它不發送focusOutEvent因爲它從來沒有首先關注焦點;如果用戶隨後在DateLineEdit中輸入了某些內容,肯定不會。從DateLineEdit對象中捕獲focusOutEvent,並在該點關閉日曆;雖然也許你會想測試用戶是否點擊了日曆(在這種情況下,它會有焦點,或者至少已經收到了一個mousePressEvent),並在這種情況下保留它(但否則關閉它)。

+0

就是這樣,謝謝。 – 2011-04-07 16:49:19

1

你是否知道Qt中已經有這樣的東西?請參閱QDateTimeEdit類的setCalendarPopup() & setCalendarWidget()。我現在唯一的區別是,要查看日曆,用戶將不得不點擊小部件的右側,而不是編輯線。

希望這會有所幫助

+0

很高興知道:) – 2011-04-07 16:50:14