如果您使用父級創建了一個窗口小部件,並忘記將其放置在佈局中,可能會發生這種情況。 要找到這樣的小部件,我會先從手動隱藏小部件組來追蹤問題小部件的來源。
您也可以使用此代碼在獲得鼠標插件信息:
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