web-dev-qa-db-fra.com

Qt FullScreen au démarrage

Je souhaite démarrer une application en plein écran (MacOS 10.8.x, Qt 5.1.1, C++) en fonction des paramètres: 

main.cpp

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

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

    return a.exec();
}

MainWindow.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;
}

MainWindow.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

Le comportement des réglages est parfait, fonctionne à merveille. Mais this->showFullScreen() fait quelque chose de très moche:

  1. Afficher la fenêtre en plein écran 
  2. Afficher la fenêtre en taille normale au centre
  3. Dimensionne la fenêtre en plein écran

Je peux fournir une vidéo si nécessaire. Comment éviter cela?

modifier :

ajouter la vidéo ici , fait un meilleur extrait sans les paramètres

15
Thomas Ayoub

J'ai déjà fait face à ce problème et une solution très agréable a été de retarder le passage au plein écran d'une seconde (avec QTimer ):

QTimer::singleShot(0, this, SLOT(showFullScreen()));
18
Martin Delille

vous pouvez essayer QMainWindow::showFullScreen();

{
    ui->setupUi(this);
    QMainWindow::showFullScreen();

}
10
Ervis Tusha

utilisez ce qui suit si vous voulez que l'application s'ouvre en tant que maximized window:

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

utilisez ce qui suit si vous voulez que l'application s'ouvre en tant que plein écran fenêtre:

Mainwindow w;
w.setWindowState(Qt::WindowFullScreen);
w.show();
6
Zhang Tianbao

Les états QWidget devraient vous aider. Suivez cette documentation Qt: QWidget :: setWindowState

Manière de mettre l'application en plein écran:

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

Merci

6

Essayez d'appeler showFullScreen() dans showEvent(). Je ne peux pas le vérifier avec Qt 5.1.1 pour le moment, mais cela a très bien fonctionné avec 4.8.x

1
ixSci

J'utilise un QWidget comme fenêtre principale, mais je le fais parfaitement fonctionner avec cette simple ligne:

this->showMaximized();

Lors de l'exécution, il est apparu remplir l'écran entier immédiatement et en douceur.

0
Zac

J'ai fait un chemin aujourd'hui, cela me semble préférable jusqu'à maintenant. J'ai essayé beaucoup d'autres solutions, mais rien n'a fonctionné.

ce que je fais est;

  • obtenir clairement la résolution d'écran disponible.

  • redimensionner la fenêtre simplement avant la fenêtre de showinf

  • montrant la fenêtre normalement

gardez à l'esprit que si vous affichez Windows avant de définir le redimensionnement de la fenêtre, et si vous avez une scène dans le programme principal, le défilement ne sera pas au centre à cause du redimensionnement. De plus, la fenêtre peut ne pas être positionnée correctement. Donc premièrement setFixedSize et ShowNormal comme ci-dessous ..

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();

}

en plus, vous pouvez faire setFixedSize au lieu de resize , exactement de la même manière, la taille sera donc statique, personne ne pourra la changer ..

0
questioner

Ce que j'ai fait était juste de retarder le passage au plein écran d'une seconde avec un Qtimer. Ce n'est pas la meilleure solution, mais cela résout le problème. Bonne chance!

0
ultimatetechie