2015-08-13 21 views
1

我们有带工具栏,菜单等的Qt-GUI。但是,只有在Mac OSX上,我们在左上角有一个奇怪的白色框。如果所有toobars都存在,它将会消失。如果它们再次隐藏,则不存在白盒。在下一次应用程序启动时,它再次出现。我无法确定其来源。有没有办法通过鼠标来识别任何部件?它似乎覆盖了所有其他小部件,甚至更糟的是,它有时会隐藏窗口按钮(最小化,关闭和最大化)。如何识别某个Qt-widget?

截图:

After startup without toolbars when undocking a GLWidget, the box is in backgound and clearly visible

动画:

Animation

如果与OSX 10.10.4的Qt 5.4.1,5.5.0测试这一点。如果搜索Qt-Bug数据库,但没有发现。我相信它是一个Qt Mac问题,因为Windows和Linux不受影响。

+1

你确定它是一个Qt部件吗?你能提供一个截图吗? – hank

回答

1

如果您使用父级创建了一个窗口小部件,并忘记将其放置在布局中,可能会发生这种情况。 要找到这样的小部件,我会先从手动隐藏小部件组来追踪问题小部件的来源。

您也可以使用此代码在获得鼠标插件信息:

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所有部件构造的,例如后在连接到您的某个菜单项的插槽中。

+0

感谢您的回答。同时我假设我已经确定了相应的小部件。我猜我们正在使用的工具栏会导致这种行为。但是,它们都是通过QMainWindow类的addToolbar()命令添加的,它将它们放到Qt :: ToolBarArea中。那么我应该在哪里给布局呢? – math

+0

不,如果使用'MainWindow :: addToolBar'添加工具栏,则不需要布局工具栏本身。 – hank

+0

我发现的是。当我不用addToolBar()cmd添加任何工具栏,也没有在其构造中指定mainWindow作为引用时,那么白色框就消失了。 – math