主题 : 鼠标右键事件捕捉的问题 复制链接 | 浏览器收藏 | 打印
用过的Linux发行版:Arch,Gentoo,Debian,Fedora,RHEL,CentOS,Ubuntu,OpenSUSE,RedFlag,Ylmf,De ..
级别: 骑士
UID: 12662
精华: 0
发帖: 181
金钱: 955 两
威望: 191 点
综合积分: 362 分
注册时间: 2010-01-11
最后登录: 2014-02-14
楼主  发表于: 2010-01-15 12:34

 鼠标右键事件捕捉的问题

图片:
我在代码中已经定义了鼠标右键的捕捉:

void MainWidget::mousePressEvent( QMouseEvent *e )
{
     switch( e->button() )
     {
          case LeftButton:
               label->clear();
               label->setText( "Mouse:LeftButton Pressed!" );
               break;
          case RightButton:
               label->clear();
               label->setText( "Mouse:RightButton Pressed!" );
               break;
          case MidButton:
                label->clear();
                label->setText( "Mouse:MidButton Pressed!" );
                break;
          default:
                label->clear();
                label->setText( "Mouse:Undefined Pressed!" );
                break;
     }
}

在单机左键时正常按程序运行,但是我在单击鼠标右键时,却出现了菜单:
业余Linux爱好者。
这个阶段正是我事业的上升期,我怎么能走得开呢?
级别: 精灵王
UID: 3197
精华: 3
发帖: 770
金钱: 6995 两
威望: 5398 点
综合积分: 1600 分
注册时间: 2008-12-30
最后登录: 2010-12-31
1楼  发表于: 2010-01-15 16:07
你的程序没看出问题,程序中有没有使用Event filter(事件过滤器),可能该事件被其他地方劫持了。
用过的Linux发行版:Arch,Gentoo,Debian,Fedora,RHEL,CentOS,Ubuntu,OpenSUSE,RedFlag,Ylmf,De ..
级别: 骑士
UID: 12662
精华: 0
发帖: 181
金钱: 955 两
威望: 191 点
综合积分: 362 分
注册时间: 2010-01-11
最后登录: 2014-02-14
2楼  发表于: 2010-01-15 16:41

 回 1楼(26672624) 的帖子

这是全部代码:

mainwidget.h

#ifndef _MAINWIDGET_H_
#define _MAINWIDGET_H_
#include <qapplication.h>
#include <qmainwindow.h>
#include <qmenubar.h>
#include <qpopupmenu.h>
#include <qlabel.h>
#include <qmessagebox.h>
class MainWidget: public QMainWindow
{
     Q_OBJECT
public:
     MainWidget( QWidget *parent=0, const char *name=0,  uint f1 = 0 );
public slots:
     void openFile();
     void saveFile();
     void exitMain();
     void aboutDialog();
     void mousePressEvent( QMouseEvent* );
     void mouseMoveEvent( QMouseEvent* );

private:
     QLabel *label;
};

#endif

mainwidget.cpp

#include "mainwidget.h"
    MainWidget::MainWidget( QWidget *parent, const char *name , uint )
               :QMainWindow( parent, name )
    {

         setCaption( "NcuPad" );
         setBackgroundColor( white );
         QFont f( "Helvetica", 18, QFont::Bold );
         setFont( f );
         label = new QLabel( "", this );
         label->setGeometry( 50, 50, 250, 50 );
         label->setBackgroundColor( white );

         QPopupMenu *file = new QPopupMenu;
         QFont f1( "Helvetica", 14, QFont::Bold );
         setFont( f1 );
         file->setFont( f1 );
         file->insertItem( "&Open", this, SLOT( openFile() ),
    CTRL+Key_O );
         file->insertItem( "&Save", this, SLOT( saveFile() ), CTRL+Key_S );
         file->insertSeparator();
         file->insertItem( "E&xit", this, SLOT( exitMain() ),
    CTRL+Key_X );

         QPopupMenu *help = new QPopupMenu;
         help->setFont( f1 );
         help->insertItem( "&About", this, SLOT( aboutDialog() ),
    CTRL+Key_A );


     QMenuBar *menu;
     menu = new QMenuBar( this );
     menu->insertItem( "&File", file );
     menu->insertItem( "&Help", help );
}
void MainWidget::openFile()
{
     label->setText( "File has been opened!" );
}
void MainWidget::saveFile()
{
     label->setText( "File has been saved!" );
}
void MainWidget::aboutDialog()
{
    QMessageBox::about(this, "About NcuPad",
            "<h2>Ncupad 1.0</h2>"
               "<p>Programmed by curay, Nanchang University."
               "<p>NcuPad is a small application that "
               "allows you to draw anythinng you want and "
               "show it on the PC.It is helpful when you are "
               "teaching something.");
}
void MainWidget::mousePressEvent( QMouseEvent *e )
{
     switch( e->button() )
     {
          case LeftButton:
               label->clear();
               label->setText( "Mouse:LeftButton Pressed!" );
               break;
          case RightButton:
               label->clear();
               label->setText( "Mouse:RightButton Pressed!" );
               break;
          case MidButton:
                label->clear();
                label->setText( "Mouse:MidButton Pressed!" );
                break;
          default:
                label->clear();
                label->setText( "Mouse:Undefined Pressed!" );
                break;
     }
}
void MainWidget::mouseMoveEvent( QMouseEvent *e )
{
     QString str = QString( "X:" );
     QString ps = "";
     ps = ps.setNum( e->x() );
     str += ps;
     str += "     Y:";
     ps = "";
     ps = ps.setNum( e->y() );
     str += ps;
     label->clear();
     label->setText( str );
}

void MainWidget::exitMain()
{
     QApplication::exit();
}

main.cpp

#include "mainwidget.h"
#include <qtopia/qpeapplication.h>

QTOPIA_ADD_APPLICATION("myapp",MainWidget)
QTOPIA_MAIN
业余Linux爱好者。
用过的Linux发行版:Arch,Gentoo,Debian,Fedora,RHEL,CentOS,Ubuntu,OpenSUSE,RedFlag,Ylmf,De ..
级别: 骑士
UID: 12662
精华: 0
发帖: 181
金钱: 955 两
威望: 191 点
综合积分: 362 分
注册时间: 2010-01-11
最后登录: 2014-02-14
3楼  发表于: 2010-01-15 16:45

 回 1楼(26672624) 的帖子

根本没有 Event filter
业余Linux爱好者。
用过的Linux发行版:Arch,Gentoo,Debian,Fedora,RHEL,CentOS,Ubuntu,OpenSUSE,RedFlag,Ylmf,De ..
级别: 骑士
UID: 12662
精华: 0
发帖: 181
金钱: 955 两
威望: 191 点
综合积分: 362 分
注册时间: 2010-01-11
最后登录: 2014-02-14
4楼  发表于: 2010-01-16 09:49
问题我解决了 我把父类从QMainWindow改为了QWidget
业余Linux爱好者。
级别: 新手上路
UID: 60775
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-12-16
最后登录: 2011-12-18
5楼  发表于: 2011-12-16 16:17
为什么我的mousePressEvent在板子上用不起来呢?