【问题标题】:QT 5.3 Mac Full ScreenQT 5.3 Mac 全屏
【发布时间】:2014-08-07 14:54:42
【问题描述】:

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

这是 Qt 中的错误还是我做错了什么?我在 OS X 10.9.3 上。

【问题讨论】:

    标签: c++ macos qt fullscreen


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

      我不确定thisthis 是否与您的问题有关。但似乎对 showFullScreen()showNormal() 的调用在 Mac 上是错误的。

      您可以使用setWindowState() 更改对showFullScreen()showNormal() 的调用。

      showFullScreen();可以改成

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

      showNormal();可以改成

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

      【讨论】:

      • 感谢您的回复!我试了一下,但不幸的是我看到了同样的行为。
      【解决方案3】:

      这是一个在我的系统(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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 2014-10-05
        • 2013-11-18
        • 1970-01-01
        相关资源
        最近更新 更多