mousepressevent的简单介绍
怎么用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,这个事件只要鼠标移动就可以监听到
