在Qt经常会出现鼠标在某个部件上悬停出现提示框,这就要用到事件过滤事件
例如。鼠标要在下面的四个部件上停留后出现日期的提示框
.h文件
#include <QMainWindow>
#include <QEvent>
#include "form.h"
#include <QMouseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
bool eventFilter(QObject *watched, QEvent *event); //事件过滤
private:
Ui::MainWindow *ui;
Form *m_form; //提示的框
};
.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_form=new Form(this); //创建提示对象
m_form->hide(); //隐藏对象
//部件事件过滤的注册
ui->label->installEventFilter(this);
ui->label_2->installEventFilter(this);
ui->pushButton->installEventFilter(this);
ui->pushButton_2->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
//光标位置
QCursor *cursor;
int x=cursor->pos().x()-100;
int y=cursor->pos().y()-100;
//qDebug()<<"x=="<<x<<"y=="<<y;
if(ui->label==watched){
if(QEvent::Enter==event->type()){
m_form->setGeometry(x,y,200,200);
m_form->show();
}else if(QEvent::Leave==event->type()){
m_form->close();
}
}
if(ui->label_2==watched){
if(QEvent::Enter==event->type()){
m_form->setGeometry(x,y,200,200);
m_form->show();
}else if(QEvent::Leave==event->type()){
m_form->close();
}
}
if(ui->pushButton==watched){
if(QEvent::Enter==event->type()){
m_form->setGeometry(x,y,200,200);
m_form->show();
}else if(QEvent::Leave==event->type()){
m_form->close();
}
}
if(ui->pushButton_2==watched){
if(QEvent::Enter==event->type()){
m_form->setGeometry(x,y,200,200);
m_form->show();
}else if(QEvent::Leave==event->type()){
m_form->close();
}
}
return QObject::eventFilter(watched,event);
}
提示框的位置可以根据自己的位子而定义。