1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
#include <QtGui>
#include "mainwindow.h"
#include <iostream>
#include <QHoverEvent>
#include <QEvent>
#include <QPoint>
#include <Qt>
#include <QWidget>
#include<QCursor>
#include "MyQPushButton"
MainWindow::MainWindow()
{
QWidget *widget = new QWidget;
widget->setAttribute(Qt::WA_Hover,true);
setCentralWidget(widget);
infoLabel = new QLabel(tr("<i>Choose a menu option, or right-click to "
"invoke a context menu</i>"));
infoLabel->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
infoLabel->setAlignment(Qt::AlignCenter);
createActions();
createMenus();
x=0;
setWindowTitle(tr("Menus"));
setMinimumSize(160, 160);
resize(480, 320);
}
void MainWindow::enterEvent(QEvent *event)
{
if (x!=1)
{
QMenu menu(this);
menu.addAction(LaunchAct);
menu.exec(QCursor::pos());
x=x+1;
}
}
void MainWindow::leaveEvent(QEvent *event)
{
x=0;
}
void MainWindow::mousePressEvent(QEvent *event)
{
x=0;
}
void MainWindow::Launch()
{
MyQPushButton LaunchAct("Ouvrir DVP / Qt","cmd /c start http://qt.developpez.com/", this);
}
void MainWindow::createActions()
{
LaunchAct = new QAction(tr("Launch"), this);
LaunchAct->setShortcut(tr("Ctrl+X"));
LaunchAct->setStatusTip(tr("Lance une application dans un processus indépendant"));
connect(LaunchAct, SIGNAL(triggered()), this, SLOT(Launch()));
}
void MainWindow::createMenus()
{
editMenu = menuBar()->addMenu(tr("&Edit"));
editMenu->addAction(LaunchAct);
editMenu->addSeparator();
}
[/I]
Et comme dans l'exemple fournis par MonGaulois, j'ai fait une classe qui va gérer l'evenement de clic dans mon menu, :
[I]class MyQPushButton : public QAction
{
public :
//createur.
//text : text du boutton
//exe : commande à executer lors de l'appui.
MyQPushButton(const QString & text,const QString & exe, QWidget * parent = 0):QAction (text,parent){};
virtual void mouseReleaseEvent ( QMouseEvent * event )
{
//lance la commande dans un process independant
QProcess::startDetached (exe);
}
private :
QString exe;
}; |
Partager