QT enterEvent和leaveEvent在指定控件内移动如何执行一次

如题,想要实现QLabel在鼠标进入时执行一次操作,鼠标离开这个标签的时候再执行一次操作,鼠标在该控件内移动不执行操作,但是在控件内时鼠标每次移动都会执行enterEvent和leaveEvent,请问如何只在移入和移出时执行呢

0

3个回答

应该是代码哪里出问题了

0

这好像就只执行一次吧 我刚在窗口类中添加了 进入的时候就只执行一次 在窗口里面移动不会执行

0

应该是你写错地方了,你应该写在子控件里面 ,而不是写在外面的界面里面

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT Event事件收集
//有时想要快速查找Qt事件的声明:故而,从源码中将它扣了出来哈! // Event handlers bool event(QEvent *event) Q_DECL_OVERRIDE; virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMo
Qt中mouseMoveEvent有时没有触发?
mouseMoveEvent
窗体部件之自定义PushButton
pushbutton.cpp #include "pushbutton.h" #include QPainter> #include QMouseEvent> #include QFontMetrics> #include QLabel> PushButton::PushButton(QString normal, QString hover, QString pressed, QWid
Qt的鼠标移入移出事件
mouseMoveEvent是鼠标移动,拖动按下左键的事件。 enterEvent是鼠标移入。 leaveEvent是鼠标移出 widget.h #ifndef WIDGET_H #define WIDGET_H #include #include namespace Ui { class Widget; } class Widget : public QWidget { Q
enterEvent和leaveEvent的问题
我创建了一个class继承QWidget,实现enterEvent和leaveEvent两个函数,我实现的效果是这样,一开始这个窗口显示出来,但只显示一半,就是move(-width/2),一旦有鼠标进入的消息,就起个timeline去一点儿一点儿的向右move,直到全都显示出来。rn效果就是一个窗口,启动时屏幕只显示一半的的窗口,鼠标进入后就慢慢的全显示出来,鼠标离开后,又慢慢的向左缩到一半显示,类似停靠窗口的概念,这样是OK的,但是问题来了,rn这是从左往右慢慢显示的,是没问题,当我从右往左显示的时候就出问题了。rn现象是,开始在屏幕右边显示一半的窗口,当鼠标进入窗口时,会进入enterEvent消息,这时候窗口往左move,但这时move完就会马上进入leaveEvent事件,但是这个move执行完时,鼠标依然是在窗口上的,为什么会进入leaveEvent事件呢?这个我很奇怪。rnrn初始化:rn this->setFixedSize(50, 60);//设置窗口大小rn mTimerEnter = new QTimeLine(500, this);rn mTimerEnter->setFrameRange(0,w/2);//max valuern mTimerEnter->setCurveShape(QTimeLine::LinearCurve);rn mTimerEnter->setEasingCurve(QEasingCurve::OutCubic);rn mTimerEnter->setUpdateInterval(20);//steprn connect(mTimerEnter, SIGNAL(frameChanged(int)), this, SLOT(showWindowAnimation(int)));rnrn mTimerLeave = new QTimeLine(500, this);rn mTimerLeave->setFrameRange(0,w/2);//max valuern mTimerLeave->setCurveShape(QTimeLine::LinearCurve);rn mTimerLeave->setEasingCurve(QEasingCurve::OutCubic);rn mTimerLeave->setUpdateInterval(20);//steprn connect(mTimerLeave, SIGNAL(frameChanged(int)), this, SLOT(hideWindowAnimation(int)));rn动画绘制:rnvoid DocWindow::showWindowAnimation(int value)rnrn int w = this->size().width();rn int screen_width = QApplication::desktop()->width();rn qDebug() << "showWindowAnimation value:" << value <<"screen_width:"<< screen_width;rn if(g_im_setting_param.nPanel_hidetype == HIDE_TO_LEFT)rn rn this->move(-w/2+value-OFFSET, 100);rn rn else if( g_im_setting_param.nPanel_hidetype == HIDE_TO_RIGTH )rn rn this->move(screen_width-value, 100);rn rnrnrnvoid DocWindow::hideWindowAnimation(int value)rnrn int w = this->size().width();rn qDebug() << "hideWindowAnimation value:" << value;rnrnrn if(g_im_setting_param.nPanel_hidetype == HIDE_TO_LEFT)rn rn this->move(-value-OFFSET, 100);rn this->move(-value-OFFSET, 100);rn rn else if( g_im_setting_param.nPanel_hidetype == HIDE_TO_RIGTH )rn rn int screen_width = QApplication::desktop()->width();rn this->move(screen_width-w+value, 100);rn rnrn事件:rnvoid DocWindow::enterEvent(QEvent *event)rnrn qDebug() << "DocWindow enterEvent";rn if(mTimerEnter->state() == QTimeLine::Running)rn rn mTimerEnter->stop();rn rn if(mTimerLeave->state() == QTimeLine::Running)rn rn mTimerLeave->stop();rn rn mTimerEnter->start();rn return QWidget::enterEvent(event) ;rnrnvoid DocWindow::leaveEvent(QEvent *event)rnrn qDebug() << "DocWindow leaveEvent";rnrn if(mTimerEnter->state() == QTimeLine::Running)rn rn mTimerEnter->stop();rn rn if(mTimerLeave->state() == QTimeLine::Running)rn rn mTimerLeave->stop();rn rn mTimerLeave->start();rn return QWidget::leaveEvent(event) ;rn
在QLabel上点击获得的效果
一般说只在button中点击获得事件,作出相应的反应。而往往需要在QLabel上作出点击和触碰的效果。 我用qlabel做出了一个效果,当鼠标碰到label区域,label底下出现一条线,离开后线条消失。当点击label后变颜色 以下是我的代码 // label.h #include class label :public QLabel { Q_OB
用Qt设计一个属于自己的图标按钮
学c++以来,用qt做过一些界面,个人感觉软件界面还是比较漂亮的,但是如果界面想嵌入一些漂亮的图标做按钮,利用qt本身已有的控件实现就有点困难了,当然可以通过为QPushButton类添加背景图标来实现,但是自我感觉效果不是很好,所以写了这篇博客,想实现一下用纯图片来做按钮控件,通过改变图片的观感,比如图片的形状大小,来表示按钮的选中或者未选中,同时为这图片按钮添加鼠标事件,从而模拟一个按键出来,
Qt 判断鼠标在某一控件上
需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里本文采用将鼠标绝对位置换算到控件上,示例代码如下: if(m_btn_start-&amp;gt;geometry().contains(this-&amp;gt;mapFromGlobal(QCursor::pos()))) ...
qt 实现停靠窗口 效果
我创建了一个class继承QWidget,实现enterEvent和leaveEvent两个函数,我实现的效果是这样,一开始这个窗口显示出来,但只显示一半,就是move(-width/2),一旦有鼠标进入的消息,就起个timeline去一点儿一点儿的向右move,直到全都显示出来。 效果就是一个窗口,启动时屏幕只显示一半的的窗口,鼠标进入后就慢慢的全显示出来,鼠标离开后,又慢慢的向左缩到一半显示
QT中窗体的停靠
停靠窗口作为主窗口的一部分,可以停靠、浮动、显示隐藏等。现在很多软件都具有可停靠窗口     可停靠位置:     [cpp] view plain copy  print? //mydockwidget.h   #ifndef MYDOCKWIDGETDEMO_H   #define MYDOCKWIDGETDEMO
Qt将鼠标移动范围限定在某个区域内
一开始的思路是 setMouseTracking(true)。然后在mouseMoveEvent中做处理。QCursor::setPos(mapToGlobal(point)); 后面发现鼠标移动到边缘会有抖动的情况。   后面换了一种思路 ,直接用的win api 了。但不好之处就是不能跨平台。这么常用的功能Qt肯定有解决方案的,但赶时间就没去找了。参考如下: RECT mainRec...
AnimationButton
继承QWidget利用重写QWidget的一些事件函数模拟出动态按钮的效果。可以学到1、QWidget的enterEvent、leaveEvent、paintEvent的重写;2、qt设计师的使用;3、初步接触qt动画;4、背景样式qss。
QT中在界面中任何拖动控件位置
在做FaceMotion项目中,由于告诉计算机每一个marker的位置,这样就需要用户在界面中能够灵活拖动label,然后把label放在marker所在的位置。那么如何能够实现这样的功能呢,下面给出了一种可行的方法。 //Widget.h #ifndef WIDGET_H #define WIDGET_H #include #include class Widget :
Qt之QEvent(所有事件的翻译)
原地址:https://www.cnblogs.com/findumars/p/8076247.htmlQEvent 类是所有事件类的基类,事件对象包含事件参数。Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects。一般来说,事件来自底层窗口系统(spontaneous() ...
QT按钮被触发两次的问题
QT自带翻译机制 规则强制指定 修改槽函数形式QT自带翻译机制如果用官方的写法on_btn_pressed()可以不用写connect函数,可以直接触发槽函数。如果此时用connect再次连接的话,就会导致on_btn_pressed()被执行两次。解决办法为:可能有问题的代码,会被执行两次 connect(ui->btn,signal(pressed()),this,slot(on_btn_pr
PyQt5编程-鼠标事件
处理鼠标事件的频率不低于键盘事件。包括按下、松开鼠标按键;移动鼠标到特定区域或离开特定区域;更改鼠标指针的形状,等等。     1.按下、松开鼠标按键     按下并释放鼠标按钮时,将调用以下方法: mousePressEvent (self,  event) - 鼠标键按下时调用; mouseReleaseEvent (self, event) - 鼠标键公开时调用; mouseDou...
Qt事件与常用事件处理、过滤
在Qt中我们可以应用信号与槽对一些鼠标点击的操作进行处理,如: QPushbutton::clicked QPushbutton::realsead QPushbutton::pressed 而信号与槽的处理属于事件的一种,产生一个信号可以认为是一个信号事件,而槽函数就是对于该信号事件进行处理的回调函数。由于信号与槽属于事件,也就是说信号很强大,但是事件更强大。那么我们就有必要好好总结一下...
Qt每天在固定时间执行一段程序(定时计划)
最近的项目过程中遇到了一些问题,需要在每天建立一个数据库表格记录相关信息,查找一些文章发现并不能实现对应功能,所以就依靠自己的想法在此献丑了,希望大神能够提出一些意见。 核心的思想就是用Qtimer定时器,网上也有相关的实例,但运用中发现一些问题 QTimer *m_timer; m_timer = new QTimer(this); connect(m_timer, SIG...
QT检测鼠标移入窗口和移出窗口
enterEvent 是鼠标移入 leaveEvent是移出 MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include &quot;QMainWindow&quot; #include &quot;QEvent&quot; namespace Ui { class MainWindow; ...
Qt编程获取鼠标移动事件
想做下面一个效果:想当鼠标移动到按钮上的时候,按钮就变大,图标换个大的,鼠标不在按钮上的时候,按钮就变小,图标也换成小的,感觉比较Cool 实现原理:为每个按钮设置监听属性 void MainHomeForm::init() { //为按钮注册事件 ui->SystemSetButton->installEventFilter(this); ui->ZoneSe
winform 移动窗口中的控件,panel
from:http://www.codeproject.com/Articles/31840/Move-controls-on-a-form-at-runtime thank the author a lot 。 本文是根据codeproject中的一个程序修改的。 可以实现,窗口中的控件鼠标拖动。really? yes code: 一个form 。一个类: form: 效果
QT加载图片和移动控件
在qt中移动控件 1、获取控件的位置函数名:QPoint pos() const 例如创建button按钮后 QPoint point = button->pos(); 如果要获取对应(x,y)的坐标, int x = button->pos().x(); int y = button->pos().y();2、移动控件获取控件的位置以后就可以移动控件的位置
Qt判断鼠标在控件上
if (widget-&amp;gt;geometry().contains(point)) {}QT判断鼠标是否在某子窗口控件上方需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里本文采用将鼠标绝对位置换算到控件上,示例代码如下:if(ui-&amp;gt;groupBox-&amp;g...
QPushButton按回车发射信号或者界面的回车按键响应
Qt编程中,通常会设置某个按钮为默认焦点,当按键盘上“回车”的时候,就会发射clicked()信号,在用一个槽来接受这个信号,就可以做很多其他的处理。代码实现如下:   QPushButton* pushButton = new QPushButton(tr("保存"));   ui.pushButton->setFocus();    //设置默认焦点   ui.pushButto
如何把layout中控件的位置替换
如何把layout中控件的位置替换
QT技巧 - 通过eventFilter解决QWidget子控件影响滑动事件问题
QT技巧 - 通过eventFilter解决QWidget子控件影响滑动事件问题 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 目录 QT技巧 - 通过eventFilter解决QWidget子控件影响滑动事件问题 1.前言 2.如何解决子类对父类事件的影响 3.代码实现 环境: QT版本:5....
Qt学习笔记:自定义窗体的移动+控件图标
在这里首先感谢刘大师的作品:Qt编写通用主界面导航(开源) 贴上演示: 本博客主要是研究了刘大师的作品然后自己总结,做点笔记。。不喜勿喷~~~ 废话不多说,先贴出代码解析一下: AppInit::Instance()->start();单例模式 Instance()首先说说这个这个Instance(),本人由于是C++新手,对此有好多C++知识不懂。因此在这里记录一下: 这个Inst
QT判断鼠标是否在某子窗口控件上方
QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里本文采用将鼠标绝对位置换算到控件上,示例代码如下: if(ui-&amp;gt;groupBox-&amp;gt;geometry().contains(this-&amp;gt;mapFromG...
Qt学习之路之自定义按钮
首先,在此感谢博主:http://blog.sina.com.cn/liang19890820 按钮有三种状态:当鼠标点击的时候,当鼠标进入按钮的时候,当鼠标没有进入按钮的时候,这3个不同的状态。 上代码~~~~ pushBtn_widget.h  /* 贴图按钮的状态: 进入, 离开, 按下 */ #ifndef PUSHBTNWIDGET_H #define PUSHBTNWID
QT 判断鼠标是否在某个控件上
if(!ui-&amp;gt;scoreStandardBtn-&amp;gt;geometry().contains(this-&amp;gt;mapFromGlobal(QCursor::pos())));
qt控件认知之布局控件
1、QFormLayout:表单布局,顾名思义就是实现表单模式的布局。表单就是提示用户进行交互的一种模式,其主要有两个列组成,第一个列用于显示信息,给予用提提示,一般叫做label域,第二个是需要用户选择输入的,一般叫field域。表单就是很多由这两项/两列内容组成的行的布局。label与field关系就是label是关联field的。    表单布局完全可以使用表格布局实现,是一种多行两列的列
判断鼠标控件是否在某个控件之内
BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)     {     // TODO: Add your specialized code here and/or call the base class        if(pMsg->message == WM_MOUSEMOVE&& pMsg->hwnd != m_hWnd)     {   
Qt 实现点击按钮窗体某个部分出来,再点击回去,循环反复
ui->widget_3->setVisible(false); ui->widget_4->setVisible(false); this->resize(473,229); connect(ui->pushButton_2,&QPushButton::released, [=]()mutable {
Qt的gui编程是,点击一次button出现两次action
点击button,动作执行两次, 原因是有两个connect,一个是自己写的代码 connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(on_pushButton_clicked())); 另一个是在gui上右键创建槽,默认生成了一个connect
MFC在指定控件区域内进行一些操作
今天在做MFC程序的时候,需要实现在指定的控件(picture控件)内来回移动画好的3D模型的功能。 经过搜集资料,整理如下 功能实现如下代码: void CcamDlg::OnMouseMove(UINT nFlags, ::CPoint point) //鼠标移动 { ::CPoint point1; CRect pRect; GetClientRect(pRect)...
QT 判断鼠标在某一控件内
可以用windows   API 也可以用鼠标事件qmouseevent
QT中多个相同的控件如何用代码方式成批的添加?
使用QT编程,假设有这样的需求:向Widget窗体中添加30个按钮(QPushButton),如何用代码实现呢? 有两种方法,一种是: 添加: for(i=0; i&amp;lt;30; i++) { QPushButton *bt=new QPushButton(QString::asprintf(&quot;Button%d&quot;, i+1), ui-&amp;gt;widget);//注:最后一个参数一定...
容器内的子控件动态排序、拖动
在WinForm窗体上实现控件(这里以Button控件为例)的位置移动可利用DoDragDrop方法实现1.对需要移动的控件利用MouseDown、MouseMove事件判断是否需要真的需要移动,防止误操作。Point downLoc; //定义变量,记录鼠标按下控件的位置private void button_MouseDown(object sender, MouseEventArgs e){...
QT ListWidget中内容的移动和拖放源码
QT ListWidget中内容的移动和拖放源码
QT定时调用槽函数的实现
最近做的东西需要一个定时调用一个函数完成一定功能,于是学习了一下QTimer定时器的运用。以下代码是我凭记忆写下的,没有粘贴已经成功的代码,可能会有的地方打错之类的,不过基本不会错,具体可以网上搜索类似的东西解决。先定义一个计时器1 QTimer* timer;2 QObject::connect(timer,SIGNAL(timeout()),this,SLOT(systimer()));/*第...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 移动软件开发培训 移动web移动教程课件