1. 定时器
- mousePressEvent();//鼠标点击事件
- mouseReleaseEvent;//鼠标松开事件
- mouseDoubleEvent;//鼠标松开事件
- mouseMoveEvent;//鼠标松开事件
- keyPressEvent()//键盘里面键值按下的事件
- keyReleaseEvent()//键盘里面键值松开的事件
- timerEvent()//定时器事件
- enterEvent()//进入窗口的事件
- leaveEvent()//离开窗口的事件
- closeEvent();//关闭事件
- dragEnterEvent();//拖事件处理
- dropEvent()//放事件处理
- eventFilter();//事件过滤器
QMimeData类支持多种不同文件的类型的数据(拖放数据的类)
测试函数 获取函数 设置函数 MIME类型
hastext text setText text
hsHtml
hasUrls
hasImage
hasColor
事件过滤器
过滤一些我们不需要的一些事件 比如我的键盘我只要数字进行输入 但是我不需要其他键的事件
qt的事件过滤器
1.事件过滤器可以对其他的组件接收端额时间进行监控
2.任意的object对象都可以作为时间过滤器使用
3.事件过滤器对象需要重启eventFilter()方法
4.组件是同过installEvent()方法来安装事件过滤器
5.事件过滤器在组件之前接受
6.事件过滤器能够决定是否将这个事件转发给组件
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
timerID_fast = this->startTimer(1000); //启动定时器,以毫秒为单位,每间隔1S触发一次定时器
timerID_last = this->startTimer(500);
}
Widget::~Widget()
{
delete ui;
}
void Widget::keyPressEvent(QKeyEvent *event) //键值按下事件
{
qDebug() << event->key() <<endl;
}
void Widget::keyReleaseEvent(QKeyEvent *event) //键值松开事件
{
qDebug() << event->key() <<endl;
}
void Widget::timerEvent(QTimerEvent *event) //定时器的事件
{
//如果触发定时器的编号是timeID_fast,处理,否则就不处理
if(event->timerId() == timerID_fast)
{
static int n = 0;
//如果达到20s就关闭定时器
if(n = 5)
{
qDebug()<<"timeID_fast 被杀死了"<<endl;
killTimer(timerID_fast);
}
//如果当前的界面ui里面有这个控件的额名字, .pro文件里面引用名字的时候报错,编译一下即可
ui->label->setText(
QString("<center><h1>timerID_fast:%1</h1></center>"));
}
else if (event->timerId() == timerID_last) {
static int n = 0 ;
ui->label_2->setText(
QString("<center><h1>timerID_fast:%1</h1></center>").arg(n++));
}
}
void Widget::enterEvent(QEvent *event) //进入窗口事件
{
ui->label->setText(
QString("<center><h1>mouse enter</h1></center>"));
}
void Widget::leaveEvent(QEvent *event) //离开窗口事件
{
ui->label->setText(
QString("<center><h1>mouse leaver</h1></center>"));
}
void Widget::closeEvent(QCloseEvent *event) //关闭窗口
{
int ret = QMessageBox::question(this,"提示","你是否要关闭窗口");
if(ret == QMessageBox::Yes)
{
//关闭窗口 接受一些需要在下面做的一些事情. 比如保存数据,调用什么接口
event->accept(); //接受者处理当前事件
}
else
{
//不关闭窗口,忽略这个事件
event->ignore(); //接收者忽略这个事件
}
}
void Widget::dragEnterEvent(QDragEnterEvent *event) //拖事件处理
{
if(event->mimeData()->hasUrls())
{
event->acceptProposedAction();
}
else {
event->ignore();
}
}
void Widget::dropEvent(QDropEvent *event) //放事件处理
{
if(event->mimeData()->hasUrls())
{
if(event->mimeData()->hasUrls())
{
QList<QUrl> list = event->mimeData()->urls();
for(int i=0;i<list.length();i++)
{
ui->textEdit->insertPlainText(list[i].toLocalFile()+"\m");
}
}
}
}
- 鼠标移入:
- 鼠标移出:
- 关闭窗口:
2. 事件过滤器
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//安装textEdit这个事件过滤器
ui->textEdit->installEventFilter(this);
//安装spinBox这个事件过滤器
ui->spinBox->installEventFilter(this);
}
Widget::~Widget()
{
delete ui;
}
bool Widget::eventFilter(QObject* ob,QEvent *e)
{
//判断textEdit是否被事件过滤器的过滤对象
if(ob == ui->textEdit)
{
//判断是否需要过滤器事件
if(e->type() == QEvent::KeyPress)
{
qDebug()<<"textEdit"<<endl;
QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(e);
//将QEevent强制转换为发生的事件类型
if(wheelEvent->delta()>0)
{
ui->textEdit->zoomIn();
qDebug()<<"textEdit++"<<endl;
}
else
{
ui->textEdit->zoomOut();
qDebug()<<"textEdit--"<<endl;
}
//如果不希望改时间继续传递和被处理 返回false就行了
return true;
}
else
{
return false;
}
}
else if(ob == ui->spinBox)
{
if(e->type() == QEvent::KeyPress)
{
qDebug()<<"spinBox"<<endl;
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
if(keyEvent->key() == Qt::Key_0)
{
qDebug()<<"spinBox++"<<endl;
ui->spinBox->setValue(10);
return true;
}
else
{
qDebug()<<"spinBox--"<<endl;
return false;
}
}
else
{
return false;
}
}
else
{
//默认执行的效果
return QWidget::eventFilter(ob,e);
}
}