Bouton fermer uniquement pour certains onglets dans Qt
J'utilise Qt pour une mission, j'ai pour le collège, et je veux utiliser QTabWidget
pour afficher une fenêtre de chat, un peu comme Pidgin est. Je veux faire de la "conversation de groupe" onglet ouvert en permanence et impossible de fermer et le reste de la "chaîne privée" onglets refermable.
QTabWidget
's setTabsClosable(bool)
n'est pas aider.
Des idées?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution plus facile, je pense.
Simplement accéder aux bouton fermer et de le redimensionner.
tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->resize(0, 0);
tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->hide();
tabButton()
retourne un pointeur, pas de l'objet lui-même. Malheureusement, il nécessite au moins 6 caractères changé, donc je ne peux pas soumettre une modification.Trouve le bar (il est privé, donc à utiliser findChild()) et enlever les boutons. Documentation prétend que les boutons de fermeture peut être placé sur le côté gauche trop.
Bonjour,
Je suppose que ce post ne va pas aider l'auteur de ce fil, mais peut-être quelqu'un d'autre se promène par ici.
Dans la plupart des cas, un non-obturantes onglet ne doit pas seulement ignorer les closevent il ne devrait pas afficher un symbole proche dans son coin. Une belle façon d'y parvenir est de modifier la QTabBar qui est à l'intérieur du QTabWidget.
Exemple:
Bien que tabBar() est en effet protégé, Klaus fait dans la bonne direction. Simplement sous-classe QTabWidget et de mettre en œuvre une méthode wrapper.
Vous devriez ré-écrire votre widget de l'événement(Event *e) la méthode, vérifiez le type de e, trouver CloseEvents, et appeler le parent de la classe de l'événement lorsque vous pouvez autoriser l'onglet pour le fermer, ou e->ignore() quand vous ne le voulez pas.
Note, vous devez parent de l'événement() gérer autr événements, afin de ne pas accept(), reject() ou de les oublier Ж)
Je suppose que vous pouvez gérer la tabCloseRequest signal et de décider si u vais fermer un onglet ou pas
http://doc.qt.io/archives/4.6/qtabwidget.html#tabCloseRequested
Edit: j'ai créé un petit exemple pour le vérifier. Mon exemple est un simple QtGui application avec une mainwindow qui a un tabwidget. J'ai ensuite ajouté la tabCloseRequested logement. Voici le code
À partir de cet exemple uniquement les onglets où la condition ne s'applique pas sera fermé.
La meilleure façon pour l'ajout d'un bouton poussoir pour certains onglets et pas dans d'autres, est de définir une sous-classe de QTabWidget de prendre le QTabBar qui est un potected!
Le code ci-dessous est testé et ça fonctionne:
Pour l'utilisation de la présente sous-classe et de créer un nouvel onglet avec un bouton personnalisé que vous avez suivi les instructions ( ui->tabWidget est un QTabWidget avec setClosableTabs=false):