没有收到QWidget focusOutEvent

时间:2011-04-01 11:18:22

标签: events qt qwidget

我通过继承QLineEdit和QCalendar创建了日期输入。当接收到mousePressEvent时,日历将显示在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();
    }
}

2 个答案:

答案 0 :(得分:1)

我猜它没有发送一个focusOutEvent,因为它从来没有关注过焦点;当然,如果用户随后在DateLineEdit中输入了某些内容。从DateLineEdit对象捕获focusOutEvent,并在该点关闭日历;虽然也许您想测试用户是否点击了日历(在这种情况下它会有焦点或者至少已经收到了一个mousePressEvent)并在这种情况下将其保留(但是否则将其关闭)。

答案 1 :(得分:1)

你知道Qt中已有这样的东西吗?请参阅setCalendarPopup()& QDateTimeEdit类的setCalendarWidget()。我现在唯一的区别是,要查看用户必须单击小部件右侧而不是编辑行的日历。

希望这有帮助