J'écris dans Qt 4.6. Je me demande s'il est possible de réaliser un tel élément de menu, qu'il est possible de le déclencher, mais aussi d'avoir un sous-menu. En cliquant dessus, vous déclenchez l'action associée, en la faisant glisser, le sous-menu apparaît.Élément de menu cliquable avec sous-menu dans Qt
Répondre
Ce comportement est un peu confus, mais je suis en train de développer une interface utilisateur avec aussi peu que possible en cliquant. Bien qu'un peu inattendu, ce comportement le rend un peu plus rapide à utiliser lorsque vous y êtes habitué.
Je n'ai pas écrit ça dans mon précédent message, mais j'écris en C++, et je n'ai aucune idée de python ... De toute façon j'ai réussi à traduire idée en C++, et ça marche mais c'est moche. . J'ai trouvé un peu meilleure approche en regardant à travers la source qt (quand je demandais cette question, j'espérais il y a une meilleure méthode « destinée »)
class MyMenu : public QMenu
{
Q_OBJECT
public:
MyMenu(QWidget* parent);
~MyMenu();
virtual void mouseReleaseEvent(QMouseEvent * event);
};
MyMenu::MyMenu(QWidget* parent):QMenu(parent)
{
}
MyMenu::~MyMenu()
{
}
void MyMenu::mouseReleaseEvent(QMouseEvent * event){
QAction* act = menuAction();
if (act){
QMenu* men = act->menu();
act->setMenu(0);
QMenu::mouseReleaseEvent(event);
act->setMenu(men);
}else{
QMenu::mouseReleaseEvent(event);
}
}
Le seul inconvénient est qu'un tel menu réagirait à en cliquant sur toutes les options avec des sous-menus, pas seulement ceux souhaités. Peut-être que ce serait une bonne idée de vérifier si quelque chose est connecté aux signaux d'action?
Sur mes ubuntu ça marche. Cependant, je suppose que cela ne fonctionnerait pas sur les fenêtres, où le système gère les menus exclusivement (à moins que qt utilise des fenêtres avec le regard de menu et se sentir, pas de menus du système), mais je suis trop paresseux pour installer les fenêtres juste pour vérifier;)
Permettez-moi de commencer par dire que ce n'est pas un bon plan d'attaque. Il y a des cas de coin ici qui prendront une quantité ridicule de temps et de code pour obtenir juste, et exigeront probablement la personnalisation par système d'exploitation.
Cela dit, cependant, la mise en œuvre effective est pas trop compliqué. Il suffit de sous-classer le QMenu à partir duquel vous créez votre sous-menu et de surcharger les gestionnaires d'événements, en forçant le menu parent à se fermer lorsqu'une «sélection» est faite. Quelque chose comme ce qui suit fonctionne essentiellement:
from PyQt4 import QtCore, QtGui
import sys
app = QtGui.QApplication(sys.argv)
widget = QtGui.QMainWindow()
widget.resize(250,150)
menu = widget.menuBar().addMenu("test")
class submenu(QtGui.QMenu): #Override the submenu class
def __init__(self,name):
QtGui.QMenu.__init__(self,name)
def mouseReleaseEvent(self,event): #catch mouseRelease Events
global menu
QtGui.QMenu.mouseReleaseEvent(self,event)
if not self.rect().contains(event.pos()):
print("Parent Selected")
menu.hide() #If the parent was selected, hide it
else: #Likely ignore these
print("Parent NOT Selected")
def c():
print("Sub-item selected")
cMenu = submenu("Sub-menu")
menu.addMenu(cMenu)
actionC = QtGui.QAction("sub-item",widget)
actionC.triggered.connect(c)
cMenu.addAction(actionC)
widget.show()
sys.exit(app.exec_())
- 1. wxPython: Network Graph - cliquable avec le menu contextuel - Any pkgs?
- 2. IPhone comme menu avec qt sur symbian
- 3. Menu contextuel Shell Windows recréé avec qt
- 4. élément de liste cliquable de listview dans android?
- 5. Dans Qt, pour un élément de menu contextuel, comment masquer l'espace de l'icône
- 6. Comment créer un widget avec un texte cliquable dans QT/PyQt?
- 7. élément de menu WPF avec l'image
- 8. élément cliquable/survolable sur la page Web
- 9. Menu Export QT au texte
- 10. élément de menu Django tri
- 11. qt barre de menu de la fenêtre
- 12. comment définir la sélection d'un élément avec force dans Qt
- 13. Élément de menu dynamique dans Drupal?
- 14. Qt: Ajout d'un élément spécial au QMenu
- 15. Problèmes avec QDialog dans Qt
- 16. Comment modifier le menu contextuel de QtWebKit dans Qt Creator?
- 17. Puis-je créer un élément dans un menu YUI qui n'est PAS un élément de menu?
- 18. QT Comment supprimer l'élément de menu d'action
- 19. Créateur Qt, insérer un menu personnalisé à l'endroit spécifié dans la barre de menu
- 20. JS: Spécification élément courant dans le menu
- 21. Implémentation de la barre de menu et du menu déroulant dans QML (Qt Quick)
- 22. ajouter un élément de menu au menu contextuel par défaut
- 23. VSTO ajouter élément de menu pour Excel 2003 avec C#
- 24. élément de menu asp.net avec jquery coin arrondi
- 25. Qt - supprimer le menu du bas?
- 26. pas cliquable dans jQTouch
- 27. Comment désactiver un élément cliquable après qu'un utilisateur clique dessus?
- 28. QT: Référence Menu contextuel (QMenu) du QTableWidget
- 29. Comment afficher un petit élément cliquable sur la carte Android
- 30. Création d'un menu contextuel dans Qt pour QTableView
Même si cela est possible, serait-ce vraiment une bonne idée de s'écarter d'un comportement si commun? Personnellement, je suis très habitué à ne jamais avoir besoin de cliquer sur l'entrée qui contient le sous-menu sauf si je veux réellement que le sous-menu apparaisse plus vite. Ce comportement alternatif serait surprenant si j'étais l'utilisateur. – TheUndeadFish