QT鼠标点击响应事件

原创 2006年05月27日 16:47:00
假如我们想在窗口指定区域响应鼠标点击事件,怎么办呢?

比如我们有一个widget窗口,该窗口里有一个PixmapLabel图片,
我们假设想在图片的左上角响应鼠标的点击事件,那么我们可以这样做!

1. 创建一个新类
//mainForm.h
#ifndef MAINFORM_H
#define MAINFORM_H
#include <qevent.h>
#include <qvariant.h>
#include <qwidget.h>
#include <qmessagebox.h>

class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QLabel;

class mainForm : public QWidget
{
    Q_OBJECT

public:
    mainForm( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
    ~mainForm();

    QLabel* myPixmapLabel;        
    
signals:
    void clicked();
   
public slots:
    virtual void mousePressEventSlot();

protected:
    void mousePressEvent(QMouseEvent *);
   
protected slots:
    virtual void languageChange();
};

#endif // MAINFORM_H

2. 实现文件

//mainForm.cpp
#include "mainForm.h"

#include <qvariant.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qimage.h>
#include <qpixmap.h>

/*
 *  Constructs a mainForm as a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'.
 */
mainForm::mainForm( QWidget* parent, const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{
    if ( !name )
    setName( "mainForm" );
   
    //setCaption("Qt Mouse Click Event Example");

    myPixmapLabel = new QLabel( this, "myPixmapLabel" );
    myPixmapLabel->setGeometry( QRect( 120, 60, 300, 270 ) );
    //放置一个图片,该图片应该在同一文件夹里,否则要指定路径
    myPixmapLabel->setPixmap( QPixmap::fromMimeSource( "about-to-install.png" ) );   
    myPixmapLabel->setScaledContents( TRUE );
    languageChange();
    resize( QSize(600, 480).expandedTo(minimumSizeHint()) );
    connect( this, SIGNAL( clicked() ), this, SLOT( mousePressEventSlot() ) );   //信号连接
}

/*
 *  Destroys the object and frees any allocated resources
 */
mainForm::~mainForm()
{
    // no need to delete child widgets, Qt does it all for us
}
void mainForm::mousePressEvent(QMouseEvent *e)

    int x = e->x();
    int y = e->y();
    //假如在QRect( 120, 60, 200, 200 ) );这个区域里,就发出信号
    if (x>120 && x<200 && y>60 && y<200)
        emit clicked();
}
void mainForm::mousePressEventSlot()
{
    //该信号响应的曹
    //给出一个提示信息
    QMessageBox::about( this, "Qt Mouse Click Event Example",
                        "You haved clicked the prearranged position /nand the widget will be closed."
                        );
    close();  //关闭程序
}
/*
 *  Sets the strings of the subwidgets using the current
 *  language.
 */
void mainForm::languageChange()
{
    setCaption( tr( "Qt Mouse Click Event Example" ) );
}


3. main 函数
//main.cpp
#include <qapplication.h>
#include "mainForm.h"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    mainForm w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}


将三个上述文件放在同一文件夹里,然后新建 pro 文件:

TEMPLATE = app
INCLUDEPATH += .
# Input
HEADERS += mainForm.h
SOURCES += main.cpp mainForm.cpp

然后:
qmake
make
直接运行,看看效果如何?
版权声明:本文为博主zieckey原创文章,转载时请保留版权信息。

Qt学习之路之鼠标事件

鼠标事件包括移动,鼠标按下,释放(松开),单击,双击....... 要自定义鼠标事件,需重写虚函数: void QWidget::mousePressEvent(QMouseEvent * even...
  • HK_5788
  • HK_5788
  • 2015年01月08日 20:38
  • 12313

qt鼠标事件总结

http://blog.sina.com.cn/s/blog_8b97b05e0100v6kk.html 1、QMouseEvent中的坐标 QMouseEvent中保存了两个坐标,一个是全局...
  • yansmile1
  • yansmile1
  • 2016年09月05日 10:31
  • 1614

Qt事件总结(鼠标、键盘)

Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行 exec()函数之后,程序将进入事件循环来监听应...
  • lovebird_27
  • lovebird_27
  • 2015年12月18日 13:52
  • 11879

Qt鼠标双击事件mouseDoubleClickEvent(QMouseEvent* event)

重写mouseDoubleClickEvent(QMouseEvent event)*实例:双击窗口时输出“sss” /*widget.h*/ #ifndef WIDGET_H #define WID...
  • lyh__521
  • lyh__521
  • 2015年07月28日 08:49
  • 4722

Qt 单击和双击事件响应实现

参考这篇博文实现: http://www.cnblogs.com/siyuan/archive/2010/11/22/1883703.html 改动为:采用变量isDoubleClicked标记,单击...
  • wdmzslh
  • wdmzslh
  • 2016年11月23日 10:03
  • 3455

QT 为按钮添加事件

在vs2010环境中。 使用creator 为按钮添加事件处理
  • a1054359972
  • a1054359972
  • 2016年02月26日 12:02
  • 14387

Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例

转载自:http://mobile.51cto.com/symbian-272812.htm,在此谢谢原作者的分享! ------------------------第一部分------------...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2015年03月13日 14:28
  • 13227

Qt QLable 响应单击点击事件

Qt QLable 响应单击点击事件 重写 event()函数 使用继承QLabel,重写事件处理的回调函数mousePressEvent 使用eventFilter事件过滤器...
  • jsjrj01
  • jsjrj01
  • 2017年07月25日 21:18
  • 484

Qt自定义事件的实现

初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event...
  • MichealTX
  • MichealTX
  • 2011年10月12日 17:23
  • 17066

QT一个简单的例子,对话框点击事件

  • 2011年04月20日 23:38
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT鼠标点击响应事件
举报原因:
原因补充:

(最多只允许输入30个字)