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 = );
~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();
timerId2 = this->startTimer(); 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 = ;
ui->label->setText(QString("<center><h1>Timer: (%1)</h1></center>")
.arg(sec++));
if(==sec)
{
this->killTimer(timerId);
}
}
else if(event->timerId() == this->timerId2)
{
static int sec = ;
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();
}

Qt笔记——Event的更多相关文章
- QT笔记之实现阴影窗口
方法一: 代码实现 在窗口构造函数中加入:setAttribute(Qt::WA_TranslucentBackground),保证不被绘制上的部分透明 重写void paintEvent(QPain ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状态改变 绘图设备(QPixmap,QImage,QBitmap,QPict ...
- Qt笔记之使用设计器自定义窗口标题栏
1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口 例如 Widget::Widget(QWidget *parent) : QWidge ...
- QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错
转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...
- Qt事件过滤器Event Filter
事件过滤器针对一类或者多种不同类型的对象,定义了重写操作. 简单的说: 1.先对UI对象注册Event Filter 例如: ui->drawBtn->installEventFil ...
- QT笔记之VS开发程序遇到的问题
转载:http://www.cnblogs.com/li-peng/p/3644812.html 转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experien ...
- QT笔记之不规则窗口的实现
QT实现的不规则窗口,是根据图片的形状显示 1.去标题栏 2.设置窗口背景为透明色 3.最后给窗口设置背景色 注:背景图为镂空的 格式为.png 图片资源下载:http://pan.baidu.com ...
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
随机推荐
- c++单例模式代码分析
单例模式就是一个C++语法精华浓缩的一个体现,有句老话:麻雀虽小五脏俱全!来形容单例非常贴切! 下面的代码分析了如果自己malloc并且memcpy一个单例指针会带来很大危害并如何防止这种情况发生. ...
- 基于log4j的消息流的实现之二消息传递
在“基于log4j的消息流的实现之一消息获取”中获取日志消息的部分,修改如下: import org.apache.commons.collections.map.HashedMap; import ...
- 玩转VFS(sys_open, overlayfs, rename)
带着问题学习dentry 1)文件删除时 dentry的结构是如何变化的?是直接设置无效的吗?如果此时正好有个访问是在要删除目录下的一个文件,这咋办呢? 2)内核document目录下级联式地使用 d ...
- Hibernate对象状态
对象状态 瞬时(transient) 自己new出来的对象,数据库没有记录与之对应,与session也没有关联 持久(persistent) 数据库中有记录与之对应,当前与session有关联,相关的 ...
- Struts1之bean标签
用于输出 <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %> ...
- BZOJ4327 JSOI2012玄武密码(AC自动机)
当然可以在SA上二分答案,但看起来会被卡log.考虑对模板串建出AC自动机,用母串在上面跑,标记上所有能到达的点.注意到达某个点时需要标记所有其通过fail指针可以走到的点,如果遇到一个标记过的点就可 ...
- WM_CTLCOLOR消息
文章参考地址:http://blog.csdn.net/hisinwang/article/details/8070393 在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOL ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- 关于session variables 和 global variables
背景 有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row' ...
- Maven 标准目录结构
Maven 标准目录结构 好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础.Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板.Maven2的标准目录结 ...