QLineEdit と QCalendar をサブクラス化して日付入力を作成しました。mousePressEvent が QLineEdit で受信されると、カレンダーが QLineEdit の下部に表示されます。問題は、そのカレンダーを非表示にすることです。ユーザーが別の場所をクリックしたときにフォーカスを閉じたいので、その focusOutEvent をオーバーライドしました。しかし、このイベントはまったく受信されません。ブレークポイントを入れることでこれを確認しました。そこで止まることはありません。私はそれに呼び出しを入れましclose()
た:
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();
}
}