mousepressevent的简单介绍

http://www.itjxue.com  2023-01-29 03:41  来源:未知  点击次数: 

怎么用mousepressevent这个函数

mousePressEvent 肯定是要有点击的press事件才会调用的。如果你想不点击鼠标,那么可以让他响应mouseMoveEvent,这个事件只要鼠标移动就可以监听到

mousePressEvent 在Qt中覆写到底是怎么用的 求详解!!!!

Qt帮助文档里面有很清楚的例子:

叫Scribble Example

里面有操作鼠标事件的例子函数:

class ScribbleArea : public QWidget

{

Q_OBJECT

public:

ScribbleArea(QWidget *parent = 0);

bool openImage(const QString fileName);

bool saveImage(const QString fileName, const char *fileFormat);

void setPenColor(const QColor newColor);

void setPenWidth(int newWidth);

bool isModified() const { return modified; }

QColor penColor() const { return myPenColor; }

int penWidth() const { return myPenWidth; }

public slots:

void clearImage();

void print();

protected:

void mousePressEvent(QMouseEvent *event);

void mouseMoveEvent(QMouseEvent *event);

void mouseReleaseEvent(QMouseEvent *event);

void paintEvent(QPaintEvent *event);

void resizeEvent(QResizeEvent *event);

private:

void drawLineTo(const QPoint endPoint);

void resizeImage(QImage *image, const QSize newSize);

bool modified;

bool scribbling;

int myPenWidth;

QColor myPenColor;

QImage image;

QPoint lastPoint;

};

去学学就行了。文档目录:

Qt帮助文档----》Qt Reference Documentation---》

Qt Example Code(Tutorials and Examples)----

Widget Examples ----Scribble*

代码目录:

Qt库的目录/examples/widgets/scribble

例子代码比较简单容易理解,就是按下鼠标干什么,移动鼠标干什么,松开鼠标干什么。

python 的qlabel的mousepressevent怎么用

做Qt开发的会知道QLineEdit,QLabel是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEdit或者QLabel的一些方法去实现没有的方法,比如clicked事件.本人就以QLineEdit QLabel添加clicked事件来说明.

Qt里面有个关键字emit,这个关键字意思就是触发一个信号,具体emit更详细的使用方法,可以百度,本文不做具体详解,只需知道emit是触发一个信号的方法即可.

下面我们就开始讲如何给QLineEdit添加clicked()事件.首先我们需要一个类,继承QLineEdit,我们定义为:mylineedit.那么分析下clicked()事件,这个事件是因为我们鼠标单击点击了下lineedit,然后触发的,那么正好,我们想到了在Qt有个mousePressEvent事件,于是我们可以重写mousePressEvent事件,然后触发自定义一个clicked()的信号,这样就可以实现点击lineedit就会发送一个clicked()的信号,代码如下:

mylineedit.h

?

123456789101112131415161718192021222324

#ifndef MYLINEEDIT_H#define MYLINEEDIT_H?#include QLineEdit#include QMouseEvent?class mylineedit : public QLineEdit{????Q_OBJECTpublic:????explicit mylineedit(QWidget *parent = 0);protected:????//重写mousePressEvent事件????virtual void mousePressEvent(QMouseEvent *event);?signals:????//自定义clicked()信号,在mousePressEvent事件发生时触发????void clicked();?public slots:?};?#endif // MYLINEEDIT_H

mylineedit.cpp

?

1234567891011121314151617

#include "mylineedit.h"?mylineedit::mylineedit(QWidget *parent) :????QLineEdit(parent){}?//重写mousePressEvent事件,检测事件类型是不是点击了鼠标左键void mylineedit::mousePressEvent(QMouseEvent *event) {????//如果单击了就触发clicked信号????if (event-button() == Qt::LeftButton) {????????//触发clicked信号????????emit clicked();????}????//将该事件传给父类处理????QLineEdit::mousePressEvent(event);}

通过以上代码,我们的lineedit已经具有了发出clicked信号的能力,那么我们就可以把他做为一个组件放到QWidget或者其他容器里面,在QWidget类里面我们提供一个处理lineedit clicked信号的槽函数,然后在QWidget构造函数里面绑定lineedit clicked信号跟对应的处理函数,这样就可以达到我们想要的效果.

widget.h

?

123456789101112131415161718192021222324252627

#ifndef WIDGET_H#define WIDGET_H?#include QWidget?namespace Ui {????class Widget;}?class Widget : public QWidget{????Q_OBJECT?public:????explicit Widget(QWidget *parent = 0);????~Widget();?private:????Ui::Widget *ui;?private slots:????//定义槽函数处理lineedit clicked????void handlelineeditclicked();????void handlelabelclicked();};?#endif // WIDGET_H

widget.cpp

?

1234567891011121314151617181920212223242526

#include "widget.h"#include "ui_widget.h"?Widget::Widget(QWidget *parent) :????QWidget(parent),????ui(new Ui::Widget){????ui-setupUi(this);????//在widget的构造函数绑定lineedit的clicked信号????connect(ui-lineEdit, SIGNAL(clicked()), this, SLOT(handlelineeditclicked()));????connect(ui-label, SIGNAL(clicked()), this, SLOT(handlelabelclicked()));}?Widget::~Widget(){????delete ui;}?void Widget::handlelineeditclicked() {????//在处理lineedit clicked函数里我们将lineedit背景色变为红色????ui-lineEdit-setStyleSheet("background-color:red");}?void Widget::handlelabelclicked() {????ui-label-setStyleSheet("background-color:green");}

这样,我们的lineedit便具有了clicked的功能了.

main.cpp

?

1234567891011

#include QtGui/QApplication#include "widget.h"?int main(int argc, char *argv[]){????QApplication a(argc, argv);????Widget w;????w.show();?????return a.exec();}

运行之后的效果就是点击lineedit,然后lineedit背景变为红色.同理,QLabel增加clicked功能也可以实现了.效果如下:

为什么鼠标左击事件不响应

您好,很高兴为您解答:

鼠标左击事件不响应,建议修改一下,如下:

//CButton.h

#ifndef CBUTTON_H

#define CBUTTON_H

#include QPushButton

#include QtGui

class CButton : public QPushButton

{

Q_OBJECT

public:

explicit CButton(QWidget *parent = 0);

signals:

public slots:

protected:

void mousePressEvent(QMouseEvent *);

};

#endif // CBUTTON_H

//CButton.cpp

#include "cbutton.h"

CButton::CButton(QWidget *parent) :

QPushButton(parent)

{

}

void CButton::mousePressEvent(QMouseEvent *e)

{

if(e-button() == Qt::LeftButton)

{

qDebug()"123";

}

}

//dialog.cpp

#include "dialog.h"

#include "ui_dialog.h"

#include "cbutton.h"

Dialog::Dialog(QWidget *parent) :

QDialog(parent),

ui(new Ui::Dialog)

{

ui-setupUi(this);

CButton *pbutton = new CButton(this);

}

Dialog::~Dialog()

{

delete ui;

}

转载,仅供参考。

如果我的回答没帮助到您,请继续追问。

如何重载mousePressEvent事件

mousePressEvent 肯定是要有点击的press事件才会调用的。如果你想不点击鼠标,那么可以让他响应mouseMoveEvent,这个事件只要鼠标移动就可以监听到

(责任编辑:IT教学网)

更多

推荐浏览器文章