如果您使用父级创建了一个窗口小部件,并忘记将其放置在布局中,可能会发生这种情况。 要找到这样的小部件,我会先从手动隐藏小部件组来追踪问题小部件的来源。
您也可以使用此代码在获得鼠标插件信息:
class WidgetTracker : public QObject
{
Q_OBJECT
public:
WidgetTracker();
void startTracking();
bool eventFilter(QObject *object, QEvent *event);
}
void WidgetTracker::startTracking()
{
QList<QWidget*> widgets = qApp->allWidgets();
Q_FOREACH (QWidget *widget, widgets)
{
widget->setMouseTracking(true);
widget->installEventFilter(this);
}
}
bool WidgetTracker::eventFilter(QObject *object, QEvent *event)
{
if (object->isWidgetType() && event->type() == QEvent::MouseMove)
{
QMouseEvent *me = static_cast<QMouseEvent*>(event);
qDebug() << "mouse move:"
<< me->globalPos()
<< object->metaObject()->className()
<< object->objectName();
}
return QObject::eventFilter(object, event);
}
您应该创建一个WidgetTracker
对象,并调用WidgetTracker::startTracking
所有部件构造的,例如后在连接到您的某个菜单项的插槽中。
你确定它是一个Qt部件吗?你能提供一个截图吗? – hank