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

Qt Discussion :

Création de fenêtre personnalisée


Sujet :

Qt

  1. #1
    Membre habitué
    Création de fenêtre personnalisée
    Bonjour à toutes et à tous!

    J'ai l'immense plaisir de vous annoncer que mon tutoriel est terminé.

    Pour en reprendre les grandes lignes, cet article retrace une manière possible (et j'espère une bonne) de réaliser une fenêtre personnalisée avec la bibliothèque Qt.

    Une "fenêtre personnalisée" qu'est-ce que c'est?
    C'est une fenêtre dont l'ensemble, donc pas juste le contenu mais aussi les bordures, la barre de titre ..., est rendu au travers des mécanismes de Qt, et ne repose plus donc sur le window manager sous-jacent. Autre intérêt, celà permet de créer des fenêtres de la forme que l'on souhaite.

    Il sera donc question de mettre en place :
    • Le dessin d'une fenêtre non rectangulaire
    • Redéfinir une barre de titre
    • Ajouter les boutons standard type agrandir, ...
    • Ajouter le déplacement de la fenêtre



    J'avais aussi quelques questions :
    Avez-vous déjà personnalisé votre fenêtre et Comment ?
    Que pensez-vous de cette manière de faire ?


    Le tutoriel est ici : http://qt.developpez.com/tutoriels/b.../customwindow/

  2. #2
    Rédacteur

    Très bon tutoriel
    Une très bonne présentation d'une des possibilités de customization que permet Qt.

  3. #3
    Membre habitué
    Merci!
    Et merci à toi pour avoir relayé toute l'info .

  4. #4
    Rédacteur

    En effet, vraiment très bon tutoriel.
    Tu poses pas mal de questions à la fin du tutoriel. Tu va faire une suite ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Membre habitué
    Merci!

    Je ne pense pas faire une suite, les questions posées dépassent le cadre d'un simple tutoriel à mon avis. Et puis, j'ai déjà du mal à faire progresser mon projet perso, je manque de temps... Mais bon c'est l'été, l'hiver sera peut-être plus propice à resté enfermé devant un PC .

  6. #6
    Nouveau membre du Club
    démarche pas à pas très didactique! merci pour ton travail.

  7. #7
    Nouveau Candidat au Club
    [image] bouton reduire, agrandir, fermer
    Bonjour,

    J'ai un soucis sur le tutoriel, j'ai bien reussi tout le tuto ca s'affiche bien (je le trouve bien construit) seulement je n'arrive pas a remplacer la partie ou tu dessine les bouton de base a savoir réduire,agrandir, fermer par mes propres images j'ai utilisé le code si dessous a la place de tout ton code de dessin (mais rien ne s'affiche =( ):

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
             QLabel *maxi = new QLabel(this);
    	 maxi->setPixmap(QPixmap("medias/maximize.png")); // où media serait un sous répertoire du répertoire d'exécution
    	 maxi->resize(23, 19);
    	 maxi->move(549,5);


    pourrait on m'aider merci

  8. #8
    Candidat au Club
    Bonjour,

    J'ai quelques problèmes avec le tuto, comme l'initialisation du QLabel m_Title par exemple.

    Cependant, le fichier source n'est plus disponible et donc je peut pas faire grand chose.

    Serait-il possible de le remettre en ligne ou de me l'envoyer svp?

    Merci d'avance! ^^

  9. #9
    Candidat au Club
    Bonjour ;

    En suivant le tuto, je rencontre un problème dans la partie ajout des boutons standards. Quand je compile le code, il me retourne une erreur en signalant que m_Minimize, m_Maximize, m_Close n'est pas déclarer dans la partie signaux et slot qui relie les boutons réduire maximiser, fermer la fenêtre. Si quelqu'un peut m'éclaircir comment éradiquer le problème. Merci à vous tous.

  10. #10
    Candidat au Club
    Problème réglé
    Cet article a déjà 7 ans mais je tiens tout de même à éclairer les lanternes de ceux qui qui ça ne fonctionne pas
    Vous devez tous avoir le bug comme quoi "m_Quit, m_Minimize, et m_Maximize ne sont pas déclarés" . Pour les plus logiques de vous, vous avez surement pensé qu'il suffisait de les déclarer en temps que WindowButton avec le ButtonState leur correspondant : dans le .h :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    WindowButton *m_Minimize;
    et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    m_Minimize= new WindowButton(WindowButton::BUTTON_MINIMIZE, this);
    dans WindowTitleBar.cpp.
    Moi, en les déclarants en temps que pointeur de cette manière, j'ai enlevé l'esperluette des connects :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    connect(m_Minimize, SIGNAL(clicked  ()),
                   this      , SLOT  (Minimized()));

    Bon, ça, c'est facile, mais malheureusement ça ne suffit pas. Si on compile, on ne voit que le bouton Quit, et il est tout moche. Pour résoudre ce bug, J'ai créé un QHBoxLayout. Pensez a l'include dans le .h Code du .h:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    QHBoxLayout *m_layoutTitleBar;
    et du cpp :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    m_layoutTitleBar = new QHBoxLayout(this);

    Pour les débutants (que faites vous là pauvres fous ) On assigne un layout horizontale au WindowTitleBar.
    Ensuite on défini la taille des boutons avec la méthode setFixedSize. Dans le WindowTitleBar.cpp:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int size=20;
        m_Minimize->setFixedSize(size,size);
        m_Maximize->setFixedSize(size,size);
        m_Close->setFixedSize(size,size);

    Enfin, on ajoute les différents widgets dedans :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    m_layoutTitleBar->addWidget(&m_Title);
        m_layoutTitleBar->addWidget(m_Minimize);
        m_layoutTitleBar->addWidget(m_Maximize);
        m_layoutTitleBar->addWidget(m_Close);


    Et voilà, tout bête, mais quand c'est pas expliqué, on s'arrache les cheveux ! Bonne prog

  11. #11
    Nouveau Candidat au Club
    moi, aussi j'ai un petit sousci dans les lignes d'initialisation du pointeur *m_Cache,
    j'ai l'initialisé ainsi: QPixmap *m_Cache=NULL; mais ça me renvoies toujours une erreur segmentation, dans les lignes de DrawPixmap, est ce que quelqu'un pourais m'aider svp? si ça vous interresser je peux uploder le code source.

  12. #12
    Candidat au Club
    Citation Envoyé par mesa2018 Voir le message
    moi, aussi j'ai un petit sousci dans les lignes d'initialisation du pointeur *m_Cache,
    j'ai l'initialisé ainsi: QPixmap *m_Cache=NULL; mais ça me renvoies toujours une erreur segmentation, dans les lignes de DrawPixmap, est ce que quelqu'un pourais m'aider svp? si ça vous interresser je peux uploder le code source.
    Bonjour dans le .h il ne faut pas initialiser ta variable mais tu le fais dans ton .cpp