Qt笔记——Event

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);

protected:
    void mousePressEvent(QMouseEvent *e);
signals:

public slots:
};

#endif // MYBUTTON_H
#include "mybutton.h"
#include <QMouseEvent>
#include <QDebug>
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{

}

void MyButton::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        qDebug()<<"left mousebutton";

        e->ignore();
    }
    else
    {
        QPushButton::mousePressEvent(e);
    }
}
#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class mylabel : public QLabel
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
    void enterEvent(QEvent *);
    void leaveEvent(QEvent *);
signals:

public slots:
};

#endif // MYLABEL_H
#include "mylabel.h"
#include <QMouseEvent>
#include <QEvent>
mylabel::mylabel(QWidget *parent) : QLabel(parent)
{
    this->setMouseTracking(true);
}

void mylabel::mousePressEvent(QMouseEvent *ev)
{
    int i = ev -> x();
    int j = ev -> y();
//    QString str = QString("abc %1 ^_^ %2").arg(123).arg("hello");
    if (ev->button() == Qt::LeftButton)
    {

    }else if(ev->button() == Qt::RightButton)
    {

    }else if(ev->button() == Qt::MiddleButton)
    {

    }
    QString text = QString("<center><h1>Mouse Press: (%1, %2)</h1></center>")
            .arg(i).arg(j);
    this->setText(text);
}

void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    QString text = QString("<center><h1>Mouse Release: (%1, %2)</h1></center>")
            .arg(ev -> x()).arg(ev -> y());
    this->setText(text);
}

void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
    QString text = QString("<center><h1>Mouse Move: (%1, %2)</h1></center>")
            .arg(ev -> x()).arg(ev -> y());
    //this->setText(text);
}

void mylabel::enterEvent(QEvent *e)
{
    QString text = QString("<center><h1>Mouse enter</h1></center>");
    this->setText(text);
}

void mylabel::leaveEvent(QEvent *e)
{
    QString text = QString("<center><h1>Mouse leave</h1></center>");
    this->setText(text);
}
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

protected:
    void keyPressEvent(QKeyEvent *event);
    void timerEvent(QTimerEvent *event);
    void closeEvent(QCloseEvent *event);

    bool eventFilter(QObject *watched, QEvent *event);
private:
    Ui::MyWidget *ui;
    int timerId;
    int timerId2;
};

#endif // MYWIDGET_H
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QKeyEvent>
#include <QDebug>
#include <QMessageBox>
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    timerId = this->startTimer(1000);
    timerId2 = this->startTimer(500);

    connect(ui->pushButton,&MyButton::clicked,
            [=]()
    {
        qDebug()<<"press now";
    });

    ui->label_2->installEventFilter(this);
}

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    qDebug()<<(char)(event->key());
    if (event->key() == Qt::Key_A)
    {
        qDebug()<<"Qt::Key_A";
    }

}

void MyWidget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == this->timerId)
    {
        static int sec = 0;
        ui->label->setText(QString("<center><h1>Timer: (%1)</h1></center>")
                           .arg(sec++));
        if(5==sec)
        {
            this->killTimer(timerId);
        }
    }
    else if(event->timerId() == this->timerId2)
    {
        static int sec = 0;
        ui->label_2->setText(QString("<center><h1>Timer: (%1)</h1></center>")
                           .arg(sec++));

    }
}

void MyWidget::closeEvent(QCloseEvent *event)
{
    int ret = QMessageBox::question(this,"question","close it?");
    if (ret == QMessageBox::Yes)
    {
        event->accept();
    }
    else
    {
        event->ignore();
    }
}

bool MyWidget::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->label_2)
    {
        QMouseEvent *env = static_cast<QMouseEvent*>(event);
        if(event->type() == QEvent::MouseMove)
        {
            ui->label_2->setText(QString("Mouse move:(%1, %2)").arg(env->x()).arg(env->y()));
            return true;
        }
    }
    else
    {
        return QWidget::eventFilter(watched,event);
    }
}

MyWidget::~MyWidget()
{
    delete ui;
}
#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();

    return a.exec();
}

原文地址:https://www.cnblogs.com/dalanjing/p/8724910.html

时间: 2024-10-17 21:26:52

Qt笔记——Event的相关文章

QT笔记:数据库总结(一)

QT笔记:数据库总结(一)http://blog.csdn.net/reborntercel/article/details/6991147 http://www.devbean.net/2013/06/qt-study-road-2-sql-model/

Qt笔记——MOC(元对象编译器)

moc 全称是 Meta-Object Compiler,也就是"元对象编译器".Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件.如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件.这个源文件中包含了 Q_OBJECT 宏的实现代码.这个新的文件名字将会是原文件名前面加上 moc_ 构成.这个新的文件同样将进入编译系统,最终被链接到二进制代码中去.因此我们可以知道,这个新的文件不是"替换"掉旧的文件,而是

QT笔记之自定义窗口拖拽移动

1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html .h文件中 1 //自己重新实现拖动操作 2 protected: 3 4 void mouseMoveEvent ( QMouseEvent * event ); 5 6 void mousePressEvent ( QMouseEvent * event ); 7 8 void mouseRele

QT笔记之实现阴影窗口

方法一: 代码实现 重写void paintEvent(QPaintEvent *event); void QT_Test::paintEvent(QPaintEvent *event) { QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRect(10, 10, this->width()-20, this->height()-20); QPainter painter(this); painter.setRende

Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)

QPainter绘图 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状态改变 绘图设备(QPixmap,QImage,QBitmap,QPicture) QPixmap图片背景透明,针对屏幕进行优化了,和平台相关,不能对图片进行修改 QImage 和平台无关,可以对图片进行修改,在线程中绘图 QPicture 保存绘图 的状态(二进制文件) pixmap.save("../pixmap.png"); 保存图片 setWindowF

QT笔记之模态对话框及非模态对话框

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭.对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互. 在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框:另一种是使用show()方法

JavaScript 学习笔记— —Event(二)

标准的事件绑定函数是 addEventListener 函数,而 IE 浏览器(IE9 以下)则是用 attachEvent. // 实现一个通用的,跨多种浏览器的时间绑定函数 function addEvent(el, type, fn) { if (window.addEventListener) { el.addEventListener(type, fn, false); } else if (window.attachEvent) { el.attachEvent('on' + typ

QT笔记之VS2010 Qt中导入qrc资源文件

转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转载3:http://www.devbean.net/2012/08/qt-study-road-2-resource-files/ 刚开始自学QT,好多东西不是很明白,从网上搜出来一些资料,先记录下来,以方便以后学习.习惯了使用VS进行写项目,所以选择下载Qt5.2.Qt插件,在给窗口和控件添加背景

QT笔记之QLineEdit自动补全以及控件提升

转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=referral 转载:http://blog.csdn.net/starcloud_zxt/article/details/5186489 转载:http://blog.sina.com.cn/s/blog_a6fb6cc90101gu7w.html 一.窗口类.h中 用到的头文件 #include <