2015-08-13 43 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