IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Problème de centrage de fenêtre

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Problème de centrage de fenêtre
    Bonjour,

    Je débute avec le logiciel Qt.
    Je développe une application sous QtCreator et mon problème est que je n'arrive pas à positionner la fenêtre de mon application au centre de l'écran en tenant compte de la taille de l'écran.
    J'ai pas mal cherché et j'ai trouvé la méthode pour le faire, cependant à l’exécution et à l'apparition de ma fenêtre, elle n'est toujours pas centrée.
    Dans mon projet, j'ai un fichier "main.cpp" et une classe "FenAccueil.h" (avec son .cpp).

    Voici le bout de code correspondant aux paramètres de ma fenêtre situé dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Fenetre Accueil
        setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        setWindowTitle("Test");
        setWindowIcon(QIcon("D:/Prog QT/images/icone.ico"));
        setAttribute(Qt::WA_TranslucentBackground, true);
     
        QDesktopWidget bureau;
        int screen = bureau.primaryScreen();
        QRect surface_bureau = bureau.screenGeometry(screen);
        int x = (surface_bureau.width()/2) - (width()/2);
        int y = (surface_bureau.height()/2) - (height()/2);
        move(x,y);
    Merci d'avance pour vos réponses, à bientôt !

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Bonjour,

    Tu n'as pas posté dans la bonne section, ici c'est Qt Creator (l'IDE), et tu poses une question sur Qt : http://www.developpez.net/forums/f10...es/qt/debuter/

    Centrer est encore plus simple que tu le crois :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    move ( QApplication::desktop()->screenGeometry().center() - rect().center() );

    En gros tu alignes les centres en faisant leur différence pour trouver le coin haut-gauche (le point de référence pour move).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Merci Troudhyl pour ta réponse,

    J'ai essayé ta méthode en remplaçant ce que j'avais fait par ta fonction mais sans résultat : ma fenêtre n'est toujours pas centrée !!!

    J'aimerai comprendre pourquoi !

    Merci d'avance.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Sachant que ton autre code devait aussi marcher (c'était juste histoire de le faire en 1 ligne), le souci est ailleurs. On peut pas t'aider sans voir plus de code.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    Bonjour,

    je confirme ce que dit Troudhyl, ton code marche.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    OK, alors voici les différents fichiers de mon projet pour que j'arrive à comprendre pourquoi ma fenêtre n'est pas centrée !!!

    - FenAccueil.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #ifndef FENACCUEIL_H
    #define FENACCUEIL_H
     
    #include <QWidget>
    #include <QApplication>
    #include <QLabel>
    #include <QPushButton>
    #include <QDesktopWidget>
    #include <QVBoxLayout>
    #include <QDirModel>
    #include <QMouseEvent>
    #include <QListView>
     
    #include "fenapplication.h"
     
    class FenAccueil : public QWidget
    {
        Q_OBJECT
    public:
        explicit FenAccueil(QWidget *parent = 0);
     
    signals:
     
    public slots:
        void ouvrirApplication();
     
    protected:
        void mouseMoveEvent(QMouseEvent *event);
        void mousePressEvent(QMouseEvent *event);
     
    private:
        QLabel * Label_FontAccueil;
        QPushButton * Button_Application;
        QPushButton * Button_Serveur;
        QPushButton * Button_JournalAlertes;
        QPushButton * Button_Conversion;
        QPushButton * Button_Quitter;
     
        QDirModel * ModeleMesuresRecentes;
        QListView *VueMesuresRecentes;
     
        QVBoxLayout * LayoutPrincipal;
     
        QPoint dragPosition;
     
    };
     
    #endif // FENACCUEIL_H

    - FenAccueil.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    #include "fenaccueil.h"
     
    FenAccueil::FenAccueil(QWidget *parent) :
        QWidget(parent)
    {
        // Le Label de font
        Label_FontAccueil = new QLabel;
        Label_FontAccueil->setPixmap(QPixmap("D:/Prog QT/images/menu_principal.png"));
        Label_FontAccueil->setAlignment(Qt::AlignCenter);
        Label_FontAccueil->setMouseTracking(true);
        Label_FontAccueil->setAcceptDrops(true);
     
        // Les boutons
        Button_Application = new QPushButton ("", Label_FontAccueil);
        Button_Application->setCursor(Qt::PointingHandCursor);
        Button_Application->setGeometry(30, 175, 340, 40);
        Button_Application->setStyleSheet("QPushButton { border-radius: 10px; background-image: url(D:/Prog QT/images/bouton1.png); } QPushButton:hover { border-style: outset; border-color: grey; border-width: 1px; border-radius: 10px; } ");
     
        Button_Serveur = new QPushButton ("", Label_FontAccueil);
        Button_Serveur->setCursor(Qt::PointingHandCursor);
        Button_Serveur->setGeometry(30, 216, 340, 40);
        Button_Serveur->setStyleSheet("QPushButton { border-radius: 10px; background-image: url(D:/Prog QT/images/bouton2.png); } QPushButton:hover { border-style: outset; border-color: grey; border-width: 1px; border-radius: 10px; } ");
     
        Button_JournalAlertes = new QPushButton("", Label_FontAccueil);
        Button_JournalAlertes->setCursor(Qt::PointingHandCursor);
        Button_JournalAlertes->setGeometry(30, 257, 340, 40);
        Button_JournalAlertes->setStyleSheet("QPushButton { border-radius: 10px; background-image: url(D:/Prog QT/images/bouton3.png); } QPushButton:hover { border-style: outset; border-color: grey; border-width: 1px; border-radius: 10px; } ");
     
        Button_Conversion = new QPushButton("", Label_FontAccueil);
        Button_Conversion->setCursor(Qt::PointingHandCursor);
        Button_Conversion->setGeometry(30, 298, 340, 40);
        Button_Conversion->setStyleSheet("QPushButton { border-radius: 10px; background-image: url(D:/Prog QT/images/bouton4.png); } QPushButton:hover { border-style: outset; border-color: grey; border-width: 1px; border-radius: 10px; } ");
     
        Button_Quitter = new QPushButton("", Label_FontAccueil);
        Button_Quitter->setCursor(Qt::PointingHandCursor);
        Button_Quitter->setGeometry(30, 339, 340, 40);
        Button_Quitter->setStyleSheet("QPushButton { border-radius: 10px; background-image: url(D:/Prog QT/images/bouton5.png); } QPushButton:hover { border-style: outset; border-color: grey; border-width: 1px; border-radius: 10px; } ");
     
        // MVC
        ModeleMesuresRecentes = new QDirModel(Label_FontAccueil);
        VueMesuresRecentes = new QListView(Label_FontAccueil);
        VueMesuresRecentes->setModel(ModeleMesuresRecentes);
        VueMesuresRecentes->setRootIndex(ModeleMesuresRecentes->index("D:/Prog QT/mesures"));
        VueMesuresRecentes->setGeometry(50, 470, 303, 110);
        VueMesuresRecentes->setStyleSheet("QListView { border: none; background-color: transparent; }");
     
        // Les layouts
        LayoutPrincipal = new QVBoxLayout;
        LayoutPrincipal->addWidget(Label_FontAccueil);
        LayoutPrincipal->setContentsMargins(0, 0, 0, 0);
        setLayout(LayoutPrincipal);
     
        // Fenetre Accueil
        setWindowFlags(Qt::Widget | Qt::FramelessWindowHint | Qt::MSWindowsOwnDC);
        setWindowTitle("Test");
        setWindowIcon(QIcon("D:/Prog QT/images/flotteur.ico"));
        setAttribute(Qt::WA_TranslucentBackground, true);
     
        move ( QApplication::desktop()->screenGeometry().center() - rect().center() );
     
        // Slots
        QObject::connect(Button_Quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
        QObject::connect(Button_Application, SIGNAL(clicked()), this, SLOT(ouvrirApplication()));
     
    }
     
    void FenAccueil::mouseMoveEvent(QMouseEvent *event)
    {
        if (event->buttons() & Qt::LeftButton) {
            move(event->globalPos() - dragPosition);
            event->accept();
        }
    }
     
    void FenAccueil::mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton) {
            dragPosition = event->globalPos() - frameGeometry().topLeft();
            event->accept();
        }
    }
     
    void FenAccueil::ouvrirGmSoftApplication()
    {
        FenApplication * FApplication = new FenApplication;
        FApplication->show();
        close();
    }
    - main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <QApplication>
    #include "fenaccueil.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        FenAccueil FAccueil;
        FAccueil.show();
     
        return app.exec();
    }
    Et encore merci de vos réponses, à bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Kylix] Problème d'affichage de fenêtres
    Par Progs dans le forum EDI
    Réponses: 1
    Dernier message: 01/01/2005, 02h46
  2. problème dessiner image dans fenêtre
    Par raoulman dans le forum MFC
    Réponses: 5
    Dernier message: 13/12/2004, 15h44
  3. problème de gestion de fenêtre
    Par clemsouz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/11/2004, 14h35
  4. [C#] Problème de centrage de la souris dans un formulaire.
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2004, 11h46
  5. Problème de création de fenêtre
    Par tomateauketchup dans le forum DirectX
    Réponses: 1
    Dernier message: 08/06/2003, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo