如果在 Qt 的 groupBox 之外单击鼠标,我正在寻找一个事件。我尝试了 FocusOutEvent 但无法获得该事件:
ui.groupBox->installEventFilter(this);
void myClass::focusOutEvent(QFocusEvent *event) { ui.groupBox->hide(); }
任何形式的帮助将不胜感激!
问题是被监视对象的事件没有被转发到过滤器对象的本地事件处理程序,例如focusOutEvent
,而是到一个特殊的虚拟事件函数,即eventFilter(QObject *obj, QEvent *event)
如文档中所述installEventFilter
。因此,您的事件处理程序应如下所示:
bool myClass::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui.groupBox && event->type () == QEvent::FocusOut)
ui.groupBox->hide();
return false;
}
您有以下选择:
子类化QGroupBox
和覆盖mousePressEvent()
在该组框上安装事件过滤器并捕获 QMouseEvents
如果您只想捕获鼠标右键单击(上下文菜单),请实现自定义上下文菜单处理程序。