QT 5.3 Mac Full Screen

QT 5.3 Mac Full Screen

本文关键字:Full Screen Mac QT      更新时间:2023-10-16

我试图将我的应用程序设置为全屏并在Qt 5.3中返回,但我在Mac上遇到了一些问题。当我使用showFullScreen()时,它会像预期的那样进入全屏。它使用标准的Mac全屏模式,在单独的桌面/空间中打开。然而,当我调用showNormal()从全屏模式返回时,应用程序窗口就消失了,我留下了一个灰色的背景。我需要滑动才能返回到应用程序所在的常规桌面。

这是一个bug在Qt或我做错了什么?我用的是OS X 10.9.3

我在Mac OS X上使用Qt 5.2时也有类似的问题(但不是Qt 4.8)。这似乎可以修复它:

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
}

我不确定这个或这个是否与你的问题有关。但是在Mac上调用showFullScreen()showNormal()似乎有bug。

可以用setWindowState()改变对showFullScreen()showNormal()的调用。

showFullScreen();可以修改为

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

showNormal();可以改成

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

这里有一个简单的示例应用程序,在我的系统(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();
}