2014-06-17 66 views
8

我想我的應用程序設置爲全屏,並在後面的Qt 5.3,但我運行到Mac上的一些問題。當我使用showFullScreen(),它進入全屏預期。它使用標準的Mac全屏模式,在單獨的桌面/空間中打開。然而,當我打電話showNormal()從全屏模式返回時,應用程序窗口就會消失,我留下了一個灰色背景。我需要刷卡才能返回應用程序所在的常規桌面。QT 5.3的Mac全屏

這是Qt的一個bug或我做錯了什麼?我在OS X 10.9.3上。

回答

0

我不知道如果thisthis涉及到你的問題。但似乎調用showFullScreen()showNormal()是在Mac上車。

您可以使用setWindowState()將呼叫更改爲showFullScreen()showNormal()

showFullScreen();可改爲

setWindowState(windowState() | Qt::WindowFullScreen); 

而且showNormal();可改爲

setWindowState(windowState() & ~Qt::WindowFullScreen); 
+1

感謝您的響應!我試了一下,但不幸的是我看到了相同的行爲。 –

0

下面是我的系統上正常工作(的Qt 5.3.1一個簡單的示例應用程序,的MacOS/X 10.9 .5)。它也適用於你嗎?如果是這樣,試着找出這個程序和你的程序有什麼不同。

您也可以在調用showNormal()之後嘗試調用show(),raise()和activateWindow(),看看這些事情是否有幫助。

// MyWindow.h 
#ifndef MYWINDOW_H 
#define MYWINDOW_H 

#include <QAction> 
#include <QLabel> 
#include <QTimer> 
#include <QTime> 
#include <QMainWindow> 

class MyWindow : public QMainWindow 
{ 
Q_OBJECT 

public: 
    MyWindow(); 

private slots: 
    void goFS(); 
    void goNormal(); 

private: 
    QAction * fsAct; 
    QAction * normAct; 
}; 

#endif // MYWINDOW_H 

...和.cpp文件:

// MyWindow.cpp 
#include <QApplication> 
#include <QMenuBar> 
#include <QMenu> 
#include <QAction> 
#include "MyWindow.h" 

MyWindow :: MyWindow() 
{ 
    fsAct = new QAction(tr("Full Screen Mode"), this); 
    connect(fsAct, SIGNAL(triggered()), this, SLOT(goFS())); 

    normAct = new QAction(tr("Normal Mode"), this); 
    connect(normAct, SIGNAL(triggered()), this, SLOT(goNormal())); 
    normAct->setEnabled(false); 

    QMenuBar * mb = menuBar(); 
    QMenu * modeMenu = mb->addMenu(tr("ScreenMode")); 
    modeMenu->addAction(fsAct); 
    modeMenu->addAction(normAct); 
} 

void MyWindow :: goFS() 
{ 
    normAct->setEnabled(true); 
    fsAct->setEnabled(false); 

    showFullScreen(); 
} 

void MyWindow :: goNormal() 
{ 
    normAct->setEnabled(false); 
    fsAct->setEnabled(true); 

    showNormal(); 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MyWindow scr; 
    scr.show(); 

    return a.exec(); 
} 
1

我在Mac OS X(但不是Qt的4.8),使用Qt 5.2類似的問題。這似乎修復它:

if (showFullScreen) 
{ 
    widget->setParent(NULL); 
    widget->showFullScreen(); 
} 
else 
{ 
    // changing the order of the showNormal() and setParent() results in a grey screen in Qt 5 on Mac 
    widget->showNormal(); 
    widget->setParent(widgetParent); // reset the original parent 
}