27

我想根据设置全屏启动应用程序(MacOS 10.8.x、Qt 5.1.1、C++):

主文件

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.showFullScreen();

    return a.exec();
}

主窗口.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

设置操作很完美,就像一个魅力。但是this->showFullScreen()做了一些非常丑陋的事情:

  1. 全屏显示窗口
  2. 在中心以正常大小显示窗口
  3. 将窗口缩放到全屏

如果需要,我可以提供视频。如何避免这种情况?

编辑 :

在此处添加视频,无需设置即可制作更好的片段

4

8 回答 8

24

我已经遇到了这个问题,一个非常好的解决方案是将全屏切换延迟一秒(使用QTimer):

QTimer::singleShot(0, this, SLOT(showFullScreen()));
于 2013-11-13T14:22:37.617 回答
23

use the following if you want to have the app open as maximized window:

Mainwindow w;
w.setWindowState(Qt::WindowMaximized);
w.show();

use the following if you want to have the app open as fullscreen window:

Mainwindow w;
w.setWindowState(Qt::WindowFullScreen);
w.show();
于 2016-02-12T09:54:13.457 回答
13

QMainWindow::showFullScreen()您可以在构造函数中尝试:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QMainWindow::showFullScreen();
}
于 2013-11-08T12:53:17.363 回答
7

QWidget 状态应该可以帮助你。遵循这个 Qt 文档:QWidget::setWindowState

将应用程序放入全屏的方法:

MainWindow w;    
w.setWindowState(w.windowState() ^ Qt::WindowFullScreen);

谢谢

于 2013-11-13T18:04:09.383 回答
2

尝试呼入showFullScreen()showEvent()我目前无法用 Qt 5.1.1 检查它,但它在 4.8.x 上运行得很好

于 2013-11-13T15:25:49.467 回答
1

我使用 QWidget 作为我的主窗口,但我让它与这个简单的行完美配合:

this->showMaximized();

运行时,它立即流畅地填满了整个屏幕。

于 2016-10-22T19:01:44.150 回答
0

我所做的只是使用 Qtimer 将全屏切换延迟 1 秒。这不是最好的解决方案,但它确实解决了问题。祝你好运!

于 2013-11-17T07:19:21.003 回答
0

我今天找到了一种方法,直到现在这对我来说似乎是最好的。我尝试了许多其他解决方案,但都没有奏效。

我要做的是;

  • 清楚地获得可用的屏幕分辨率。

  • 在 showinf 窗口之前调整窗口大小

  • 正常显示窗口

请记住,如果您showWindow()在设置窗口调整大小之前这样做,并且如果您在主程序中有一个场景,那么由于调整大小,滚动将不会位于中心。此外,窗口可能未正确定位。setFixedSize()所以首先ShowNormal()如下..

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

  QApplication app(argc, argv);
  WhateverMainWindowClass *w = new WhateverMainWindowClass();

/////////////////////////

  QRect screenGeometry = QApplication::desktop()->availableGeometry();
  w->resize(screenGeometry.width(), screenGeometry.height());
  w->showNormal();

/////////////////////////

  return app.exec();
}

此外,您可以使用完全相同的方式setFixedSize()代替,因此大小将是静态的,没有人可以更改它。resize()

于 2015-01-12T17:36:07.627 回答