Comment réaliser une action en cliquant sur un QMenu objet seulement?
Voici un aperçu de l'interface graphique. Je veux exécuter des actions simples, uniquement en cliquant sur QMenu
objet de l'Aide. Cette QMenu
objet n'a PAS de sous-menus.
Pouvez-vous svp me conseiller comment faire pour effectuer des actions lorsque seule la QMenu
est cliqué
Voici ce que j'ai essayé, mais j'ai un vide en sortie.
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QSignalMapper>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void createActions();
QSignalMapper *pSignalMapper;
private slots:
void help();
};
#endif //MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createActions();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createActions()
{
pSignalMapper = new QSignalMapper(this);
connect(ui->menuHelp, SIGNAL(triggered(QAction*)), this, SLOT(help()));
}
void MainWindow::help()
{
qDebug()<<"inside help qdialog";
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <ui_mainwindow.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
De sortie lorsque je clique sur Aide QMenu
, absolument rien:
Starting E:\Qt2\modules\guiPrototype2\build-guiPrototype2-Desktop_Qt_5_2_0_MSVC2010_32bit-Debug\debug\guiPrototype2.exe...
eh bien, je suppose que votre connect() n'a pas réussi, pourriez-vous s'il vous plaît vérifier la valeur de retour de se connecter? si elle est fausse, alors la connexion ne fonctionne pas. En Plus je pense que " aboutThoShow() est un meilleur ajustement qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#aboutToShow
OriginalL'auteur venom8914 | 2014-03-05
Vous devez vous connecter pour publier un commentaire.
Je voudrais essayer de faire ce qui suit:
OriginalL'auteur vahancho
La raison pour laquelle cela ne fonctionne pas, c'est parce que vous n'êtes pas déclencher toute action.
Ce signal est émis lorsqu'une action dans un menu appartenant à cette barre de menu est déclenchée à la suite d'un clic de souris; l'action est l'action qui a provoqué le signal émis.
Ce que vous devez faire est d'ajouter une action à votre
QMenuBar
au lieu d'unQMenu
.Parce que vous êtes à l'aide de
QMenu
. Lire ma réponse. Il fonctionne comme je l'ai testé.thank u, thuga. je suis d'accord avec u, déclenchée() fonctionne lorsque nous avons QAction. Dans ce cas je m'en excuse je pour ne pas mentionner qu'il n'y a pas QAction éléments. Je cherchais une méthode pour travailler avec QMenu seulement, comme mentionné. 🙂
Je sais. J'essayais de faire remarquer que vous devez utiliser
QAction
au lieu deQMenu
. À l'aide deQMenu
objet comme unQAction
objet est un vilain hacky façon de faire les choses.QMenu
est un widget de menu, et c'est ce qu'il doit faire. L'offre d'un menu.C'est plus ordonné que l'on a accepté la réponse. Avec le QMenu::aboutToShow() du signal, la barre de menu reste sélectionné après j'ai cliqué sur le menu de contrôle, ce qui gâche l'expérience de l'utilisateur un peu. Cette méthode fonctionne plus en douceur.
OriginalL'auteur thuga