在Qt开发中遇到一个程序中有两个或多个独立窗口都显示在桌面上,且我们希望不管鼠标放在哪个窗口的哪个控件上,该控件的ToolTip提示框会显示。
但是实际上因为Qt只允许当前active活动窗口或者focus焦点窗口的控件鼠标放上去才会显示,那么如果不是活动窗口或者焦点窗口也需要实现把鼠标放上去会显示ToolTip提示框该怎么办呢?我这里提供一种办法:
bool SearchListWnd::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::Enter)
{
QPushButton *button = qobject_cast<QPushButton*>(obj);
if(button)
{
if (event->type() == QEvent::Enter)
{
QPalette palette = QToolTip::palette();
palette.setColor(QPalette::ToolTipBase, QColor(255, 255, 255));
palette.setColor(QPalette::ToolTipText, QColor(102, 102, 102));
QToolTip::setPalette(palette);
QToolTip::showText(QCursor::pos(), button->toolTip());
}
}
}
return QObject::eventFilter(obj, event);
}
给所需的窗口重载事件过滤器,给改窗口的需要展示提示框的子控件装上事件过滤器,例如
btn_item是窗口searchListWnd的子控件。
btn_item->installEventFilter(searchListWnd);
那么当鼠标放在searchListWnd窗口的子控件btn_item上,tooltip提示框就会显示了,不管searchListWnd是不是焦点窗口或活动窗口。