Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > C et C++ > Bibliothèques > Qt

Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt

Réponse
 
Outils de la discussion
Vieux 13/08/2008, 10h11   #1 (permalink)
Membre Confirmé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 24
Messages: 207
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 15h03   #2 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
Par défaut

Code :
setWindowFlags ( Qt::Window | Qt::FramelessWindowHint );
FloMo est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h01   #3 (permalink)
Membre Confirmé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 24
Messages: 207
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h06   #4 (permalink)
Responsable Qt
 
Avatar de Mongaulois
 
Date d'inscription: mars 2004
Localisation: rennes
Âge: 26
Messages: 4 400
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
__________________
Qt need you!!
Intéressé pour participer à la FAQ, Tutoriels ou Traduction des tuto Qt? n'hésitez pas à m'envoyer un MP
Mongaulois est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h15   #5 (permalink)
Responsable Qt
 
Avatar de Mongaulois
 
Date d'inscription: mars 2004
Localisation: rennes
Âge: 26
Messages: 4 400
Par défaut

en faite c'est le flag Qt::FramelessWindowHint qui permet de virer le décore .
__________________
Qt need you!!
Intéressé pour participer à la FAQ, Tutoriels ou Traduction des tuto Qt? n'hésitez pas à m'envoyer un MP
Mongaulois est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h19   #6 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h27   #7 (permalink)
Membre Confirmé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 24
Messages: 207
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h40   #8 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 16h54   #9 (permalink)
Responsable Qt
 
Avatar de Mongaulois
 
Date d'inscription: mars 2004
Localisation: rennes
Âge: 26
Messages: 4 400
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.
__________________
Qt need you!!
Intéressé pour participer à la FAQ, Tutoriels ou Traduction des tuto Qt? n'hésitez pas à m'envoyer un MP
Mongaulois est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h01   #10 (permalink)
Membre Confirmé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 24
Messages: 207
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h11   #11 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h12   #12 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h26   #13 (permalink)
Membre Confirmé
 
Avatar de MacPro
 
Date d'inscription: novembre 2007
Localisation: Villeurbanne
Âge: 24
Messages: 207
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 17h37   #14 (permalink)
Modérateur
 
Avatar de FloMo
 
Date d'inscription: juillet 2004
Messages: 359
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 18h03   #15 (permalink)
Responsable Qt
 
Avatar de Mongaulois
 
Date d'inscription: mars 2004
Localisation: rennes
Âge: 26
Messages: 4 400
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
__________________
Qt need you!!
Intéressé pour participer à la FAQ, Tutoriels ou Traduction des tuto Qt? n'hésitez pas à m'envoyer un MP

Dernière modification par Mongaulois ; 13/08/2008 à 19h14
Mongaulois est actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS QTFAQ QtTUTORIELS QtLIVRES QtBLOG QtQt TV

Réponse

Précédent   Forum des développeurs > C et C++ > Bibliothèques > Qt

 
Offres d' emploi informatique sur Lesjeudis.com


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
Navigation rapide