Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 13/08/2008, 10h11   #1
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut [Visuel] Comment enlever la barre de titre de windows ?

Bonjour,

pour expliquer ma question, deux bons dessins :

Actuellement, j'ai ça :



Je voudrais enlever la barre de titre, là ou y'a écrit
Citation:
[Qt Evaluation] MainWindow - [Preview]
pour la remplacer par une barre que je dessinerai moi-même, comme cela est fait sur Mac par exemple :



comment faire ?
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 15h03   #2
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Code :
setWindowFlags ( Qt::Window | Qt::FramelessWindowHint );
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h01   #3
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

Merci de ta réponse, malheureusement, je me suis un peu mal expliqué, je veux pas vraiment enlever la barre d'outils, je veux la customiser, tout comme on customise la barre de titre d'un dockwidget, en gros, remplacer le degradé bleau foncé vers bleu clair par autre chose par exemple, changer les boutons ....
Pour donner un exemple, il faut télécharger le naviguateur Mac Safari pour PC. Suivant la situation, on peut apercevoir le subterfuge :

MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h06   #4
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

tu peut utiliser setMask pour définir la zone de ta fenêtre et ainsi virer la barre de titre
http://doc.trolltech.com/4.4/qwidget.html#setMask

Aprés tu peut y mettre la tiennes.
Voici un exemple.
http://doc.trolltech.com/4.4/widgets-shapedclock.html

Si tu veut faire de l'alpha, il n'y as rien de portable dans Qt. Il existe un projet qui le fait sous windows. Si ca t'intéresse, fait une recherche sur le forum
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h15   #5
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

en faite c'est le flag Qt::FramelessWindowHint qui permet de virer le décore .
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h19   #6
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Tu ne peux pas personnaliser le gestionnaire de fenêtre autrement qu'en le simulant via tes propres éléments graphiques. En effet, le gestionnaire de fenêtre est géré par le système d'exploitation, et pas par Qt.

Par contre, tu peux faire une fenêtre sans bordure, qui possède une zone permettant de la déplacer, un bouton pour minimiser, un bouton pour maximiser, etc.

Pour ce qui est de la gestion du redimensionnement, il va falloir que tu regénères à chaque fois une image de la taille voulue en mémoire afin de l'appliquer en masque sur ta fenêtre ( vu le contexte )
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h27   #7
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

Citation:
Par contre, tu peux faire une fenêtre sans bordure, qui possède une zone permettant de la déplacer, un bouton pour minimiser, un bouton pour maximiser, etc.
si t'as l'astuce en tête et que tu veux m'en faire part, je suis preneur !
J'avais réussi à faire ce que je voulais y'a un moment avec Borland C++ builder mais j'avais tout redessiné et la fenêtre n'était plus une vraie fenêtre mais une fenêtre sans titre et sans boutons. Je pensais qu'avec Qt y'aurais un moyen pour feinter le systeme qui gere les fenetres !
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h40   #8
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Citation:
Envoyé par Kestufou Voir le message
si t'as l'astuce en tête et que tu veux m'en faire part, je suis preneur !
J'avais réussi à faire ce que je voulais y'a un moment avec Borland C++ builder mais j'avais tout redessiné et la fenêtre n'était plus une vraie fenêtre mais une fenêtre sans titre et sans boutons. Je pensais qu'avec Qt y'aurais un moyen pour feinter le systeme qui gere les fenetres !
Tu surcharges l'évènement paint() de ta fenêtre. Dans celui-ci, tu demandes à ce que le dessin soit basé sur une forme que tu produis toi-même. Tu redessines la fenêtre toi-même donc.
Pour ce qui est des boutons de fermeture, etc... tu associes le slot close() au signal clicked() par exemple.
Pour ce qui est de la partie déplacement, tu détectes le clique sur la zone correspondant à la barre de titre et lors du déplacement, tu déplaces ta fenêtre. Je pense que tous les systèmes utilisent ça. ( Live Messenger, iTunes )
Par contre, tu as intérêt de bien optimiser.
Bon courage pour la suite.
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h54   #9
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

ma version :
1- tu créé un widget qui contient ta bar de titre avec les evenement associé et une zone avec un layout (pour y mettre ce que tu veut)
2- sur cette widget tu applique le flag Qt::FramelessWindowHint.
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h01   #10
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

Citation:
Envoyé par FloMo Voir le message
Tu surcharges l'évènement paint() de ta fenêtre. Dans celui-ci, tu demandes à ce que le dessin soit basé sur une forme que tu produis toi-même. Tu redessines la fenêtre toi-même donc.
Pour ce qui est des boutons de fermeture, etc... tu associes le slot close() au signal clicked() par exemple.
Pour ce qui est de la partie déplacement, tu détectes le clique sur la zone correspondant à la barre de titre et lors du déplacement, tu déplaces ta fenêtre. Je pense que tous les systèmes utilisent ça. ( Live Messenger, iTunes )
Par contre, tu as intérêt de bien optimiser.
Bon courage pour la suite.
lol, c'est ce que j'avais fini par faire avec borland, mais c'est franchement pas réactif, suffit que windows décide de faire autre chose et hop tes boutons fermeture et tout ça sont moins réactifs, voir carrément en retard suivant les situations. Merci en tout cas de t'être penché sur la question
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h11   #11
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Citation:
Envoyé par Mongaulois Voir le message
ma version :
1- tu créé un widget qui contient ta bar de titre avec les evenement associé et une zone avec un layout (pour y mettre ce que tu veut)
2- sur cette widget tu applique le flag Qt::FramelessWindowHint.
Plus simple, plus clair, plus efficace.
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h12   #12
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Citation:
Envoyé par Kestufou Voir le message
lol, c'est ce que j'avais fini par faire avec borland, mais c'est franchement pas réactif, suffit que windows décide de faire autre chose et hop tes boutons fermeture et tout ça sont moins réactifs, voir carrément en retard suivant les situations. Merci en tout cas de t'être penché sur la question
Par rapport à la réactivité, tout dépend des performances de l'outil. Pour avoir réalisé un outil similaire avec Qt, les performances sont très correctes.
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h26   #13
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

Citation:
Envoyé par Mongaulois Voir le message
ma version :
1- tu créé un widget qui contient ta bar de titre avec les evenement associé et une zone avec un layout (pour y mettre ce que tu veut)
2- sur cette widget tu applique le flag Qt::FramelessWindowHint.
J'ai pas tout saisi. Actuellement, j'ai un QMainWindow pour mon application avec plein de bazar dedans (QMenu, QToolBar, QStatusBar, un layout, un QTab et plusieurs QDockWidget)et c'est ce QMainWindow dont je veux changer le titre.
Tu voudrais que dans ce widget, je dessine un autre widget (avec des boutons) qui serait ma barre de titre, que je relie les signaux de ces boutons aux slots appropriés de la fenetre conteneuse (qui n'a pas de bordures) et que j'ajoute un layout pour le reste ?
Mais dans ce cas, comment je mets mes menus, ma barre d'outils et tout le reste ? Faudrait que ça soit tout 'hand-coded' car depuis Qt Designer je ne peux pas ajouter de QStatusBar ni de QMenu ...
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h37   #14
Membre chevronné
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 639
Par défaut

Citation:
Envoyé par Kestufou Voir le message
Mais dans ce cas, comment je mets mes menus, ma barre d'outils et tout le reste ? Faudrait que ça soit tout 'hand-coded' car depuis Qt Designer je ne peux pas ajouter de QStatusBar ni de QMenu ...
En effet...
FloMo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 18h03   #15
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

je me suis amusé pour voir
Code :
 
#include <QtGui>
 
class myWindows : public QWidget
{
    Q_OBJECT
public :
    myWindows()
    :QWidget(0,Qt::FramelessWindowHint) 
    {
        resize(800,600);
        m_gL = new QVBoxLayout;
        m_gL->setMargin(2);
        m_gL->setSpacing(2);
        QWidget * bar_Titre = new QWidget;
        //creation de la bar de titre
        bar_Titre->setFixedHeight(20);
        {
            QHBoxLayout * l = new QHBoxLayout;
            l->setMargin(0);
            l->setSpacing(2);
            l->addWidget(new QLabel ("ma bar de titre"),Qt::AlignLeft);
 
            l->addSpacing(100);
 
            QPushButton * but =new QPushButton("+");
            but->setFixedSize(18,18);
            connect(but,SIGNAL(clicked()),this,SLOT(maximiser()));
            l->addWidget(but,Qt::AlignRight);
 
            but =new QPushButton("x");
            but->setFixedSize(18,18);
            l->addWidget(but,Qt::AlignRight);
            connect(but,SIGNAL(clicked()),this,SLOT(close()));
        bar_Titre->setLayout(l);
        QString style ="QWidget {"
                        " background: qlineargradient(x1: 0, y1: 1, x2: 0, y2: 0,"
                        " stop: 0 #00FF00, stop: 1 #FFFFFF);"        
                        "}";
        bar_Titre->setStyleSheet(style);
        }
        m_gL->addWidget(bar_Titre);
        setLayout(m_gL);
 
    }
    void addWidget(QWidget *w)
    {
        m_gL->addWidget(w);
    }
 
protected :
     //gestion de la souris pour bouger la fenetre
     void mousePressEvent(QMouseEvent *event)
     {
         if (event->button() == Qt::LeftButton) {
             dragPosition = event->globalPos() - frameGeometry().topLeft();
             event->accept();
         }
     }
 
     void mouseMoveEvent(QMouseEvent *event)
     {
         if (event->buttons() & Qt::LeftButton) {
             move(event->globalPos() - dragPosition);
             event->accept();
         }
     }
 
private slots :
    //slot pour minimiser/maximiser
    void maximiser()
    {
        if (isMaximized ())
            showNormal();
        else
            showMaximized();
    }
private :
     QVBoxLayout * m_gL;
     QPoint dragPosition;
 
};
 
#include "main.moc"
 
int main(int argc, char *argv[])
{
   
    QApplication app(argc,argv);
    myWindows w;
 
    QListView * lw = new QListView;
    {
        QStringList list;
        list<<"essai 1"<<"esssai 2"<<"blablabla"<<"aze"<<"azzddz";
        lw->setModel(new QStringListModel(list));
    }
    QMainWindow * mainWindow = new QMainWindow;
    {
        QToolBar * toolBar = new QToolBar;
        toolBar->addAction("aze");
        toolBar->addAction("azer");
        mainWindow->addToolBar(toolBar);
        mainWindow->setCentralWidget(lw);
    }
    w.addWidget(mainWindow);
    w.show();
 
    return app.exec();
}
Y as trop d'appel de move (il faut utiliser un timer), y as pas la gestion de resize, mais ca marche nikel

Citation:
Envoyé par Kestufou Voir le message
Mais dans ce cas, comment je mets mes menus, ma barre d'outils et tout le reste ? Faudrait que ça soit tout 'hand-coded' car depuis Qt Designer je ne peux pas ajouter de QStatusBar ni de QMenu ...
comment cela???

SInon y as ceci
http://www.qt-apps.org/content/show....?content=67309
mais je sais pas si ca correspond
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt

Dernière modification par yan ; 13/08/2008 à 19h14.
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/08/2008, 16h01   #16
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

tant de passion autour de ce topic
j'ai à peu près trouvé ma solution. L'inconvénient de ta solution c'est qu'elle ne me permet pas d'avoir des bordures dessinées par mes soins. Donc au final, mon widget conteneur est un QFrame. Il est instancé sans parent, donc Qt le fou automatiquement dans une fenêtre. Lors de sa constrution, je donne le flag Qt::FramelessWindowHint. Ensuite, je peux customiser la bordure de ce QFrame avec une feuille de style, usant et abusant de border-image et des valeurs de padding négatives. Lorsque mongaulois m'aura filé mon espace 'personnel' (personnel mais un peu étendu ) alors je mettrai mon design.
merci de vos réponses.
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/08/2008, 16h12   #17
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

Citation:
Envoyé par Kestufou Voir le message
tant de passion autour de ce topic
J'avais jamais essayé
Citation:
Envoyé par Kestufou Voir le message
j'ai à peu près trouvé ma solution. L'inconvénient de ta solution c'est qu'elle ne me permet pas d'avoir des bordures dessinées par mes soins.
Ben si, c'est pareil. Tu peut même utiliser setMask pour faire n'importe qu'elle forme
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/08/2008, 16h44   #18
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Nom : yan verdavaine
Date d'inscription: mars 2004
Localisation: rennes
Âge: 28
Messages: 7 279
Par défaut

Citation:
Envoyé par Mongaulois Voir le message
Ben si, c'est pareil. Tu peut même utiliser setMask pour faire n'importe qu'elle forme
Images attachées
Type de fichier : jpg Clipboard01.jpg (95,0 Ko, 38 affichages)
__________________
anciennement Mongaulois

Qt needs you!!
Intéressé pour participer à la FAQ (200 QR), Tutoriels ou Traduction des tuto Qt ou des Qt Quarterly? n'hésitez pas à m'envoyer un MP
Mon nom sur mars
Participez au premier défi DVP/Qt
yan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/08/2008, 17h29   #19
Alp
Rédacteur
 
Avatar de Alp
 
Date d'inscription: juin 2005
Localisation: Marseille
Âge: 21
Messages: 8 456
Par défaut

Excellent

Je ne savais pas qu'on pouvait aller aussi loin.
Merci pour ton topic, ça va fournir un excellent article ou une excellente Question/Réponse de FAQ.
Alp est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/08/2008, 17h59   #20
Membre éclairé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 26
Messages: 319
Par défaut

Citation:
Envoyé par Mongaulois Voir le message
J'avais jamais essayé

Ben si, c'est pareil
J'ai fais plusieurs tests, dans ta classe donnée en exemple en page précédente, je ne trouve pas comment cusomiser la fenetre totale.

Citation:
class myWindows : public QWidget
Pour ce faire, alors, dans Qt Designer, j'ai fait un nouveau QFrame, que je customize avec une style sheet, je peux donc customiser border. DANS ce QFrame, je mets un Vertical Layout et dans ce vertical layout je mets mon QWidget qui est en fait ma barre de titre.

Puis, je prends ce qui était auparavant mon QMainWindow et je l'instancie sans ses cadres et je le fous dans le VerticalLayout ci dessus et c'est tout bon.
J'avais lu la doc sur les masques, mais à un endroit ça dit que ça peut être lent.

PS : Si je fais :

Citation:
Pour ce faire, alors, dans Qt Designer, j'ai fait un nouveau QFrame, que je customize avec une style sheet, je peux donc customiser border. DANS ce QFrame, je mets un Vertical Layout et dans ce vertical layout je mets mon QWidget qui est en fait ma barre de titre.
en remplaçant le QFrame par un QWidget, je ne peux pas customizer le border, car comme écrit dans la documentation concernant un QWidget :

Citation:
Supports only the background, backgorund-clip and background-origin properties.
et donc le Box Model n'est pas modifiable car inexistant.

Alors que pour un QFrame :

Citation:
Supports the box model.
MacPro est déconnecté   Envoyer un message privé Réponse avec citation
NEWS QTFAQ QtTutoriels QtOutils QtBinaires QtLivres QtBlog QtQt TV

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 07h24.


Vos questions techniques : forum d'entraide Qt - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.