#c #macos #qt #fullscreen
#c #macos #qt #полноэкранный режим
Вопрос:
Я пытаюсь настроить свое приложение на полноэкранный режим и обратно в Qt 5.3, но у меня возникли некоторые проблемы на Mac. Когда я использую showFullScreen()
, он переходит в полноэкранный режим, как и ожидалось. Он использует стандартный полноэкранный режим Mac, в котором он открывается на отдельном рабочем столе / пространстве. Однако, когда я вызываю showNormal()
возврат из полноэкранного режима, окно приложения просто исчезает, и я остаюсь с серым фоном. Мне нужно провести пальцем, чтобы вернуться на обычный рабочий стол, на котором находится приложение.
Это ошибка в Qt или я делаю что-то не так? Я на OS X 10.9.3.
Ответ №1:
У меня были похожие проблемы с Qt 5.2 на Mac OS X (но не 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
}
Ответ №2:
Я не уверен, связано ли это или это с вашей проблемой. Но кажется, что вызовы showFullScreen()
и showNormal()
ошибки на Mac.
Вы можете изменить вызовы на showFullScreen()
и showNormal()
с setWindowState()
помощью .
showFullScreen();
может быть изменен на
setWindowState(windowState() | Qt::WindowFullScreen);
И showNormal();
может быть изменен на
setWindowState(windowState() amp; ~Qt::WindowFullScreen);
Комментарии:
1. Спасибо за ответ! Я попробовал, но, к сожалению, я вижу то же поведение.
Ответ №3:
Вот простой пример приложения, которое корректно работает в моей системе (Qt 5.3.1, macOS / X 10.9.5). Правильно ли это работает и для вас? Если это так, попробуйте выяснить, чем отличается эта программа от вашей программы.
Вы также можете попробовать вызвать show(), raise() и activateWindow() после вызова showNormal() и посмотреть, помогут ли эти вещи.
// 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();
}