当前位置: 首页 > news >正文

深圳哪里有网站建设手表网站 源码

深圳哪里有网站建设,手表网站 源码,wordpress 更新提示,阿里网 网站备案流程文章目录 事件重写事件事件分发 事件 事件#xff08;event#xff09;是由系统或Qt本身在不同的时刻发出的。比如#xff0c;当用户按下鼠标#xff0c;敲下键盘#xff0c;或窗口需要重新绘制的时候#xff0c;都会发出一个相应的事件。一些事件是在对用户操作做出响应… 文章目录 事件重写事件事件分发 事件 事件event是由系统或Qt本身在不同的时刻发出的。比如当用户按下鼠标敲下键盘或窗口需要重新绘制的时候都会发出一个相应的事件。一些事件是在对用户操作做出响应的时候发出如键盘事件等另一些事件则是由系统自动发出如定时器事件在我们之前写的游戏壳子中用的就是这类事件。 Qt的事件和信号槽很容易混淆事件其实也就是所谓的事件驱动signal由具体对象发出然后会马上交给connect函数连接的slot进行处理。而对于事件Qt使用一个**事件队列windowSystemEventQueue**对所有发出的事件进行维护当新的事件产生时会被追加到事件队列的尾部前一个事件完成后取出后面的事件进行处理。但是必要的时候Qt的事件也是可以不进入事件队列而是直接处理的。 如果我们使用组件我们关心的是信号槽如果我们自定义组件我们关心的是事件。 重写事件 一般我们重写某个组件的事件需要自定义类继承对应的组件类重写感兴趣的事件。 新建子类 然后在代码创建成功后将父类改为QLable。 想知道有哪些事件我们需要转到父类中模糊搜索event事件多为虚函数供我们重写定义自己的实现规则。 我们关注鼠标相关的事件分别将mousePressEvent,mouseMoveEvent,mouseReleaseEvent三个虚函数在qt中表现为斜体重写。 可以在函数的声明后面加上宏Q_DECL_OVERRIDE或关键字override进行校验当前的虚函数是否为重写父类的如果不是则会报错。 在重写的三个虚函数中我们需要跟踪鼠标左键在Lable组件的状态。 声明 public:void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;定义 void MyLabel::mousePressEvent(QMouseEvent *ev){if(ev-button() Qt::LeftButton){ //如果按下的键是鼠标左键this-setText(QString(鼠标左键按下%1,%2).arg(ev-x()).arg(ev-y()));} }//button触发当前事件的按钮 //buttons触发当前事件时有哪些按键是按下的 void MyLabel::mouseMoveEvent(QMouseEvent *ev){if(ev-buttons() Qt::LeftButton|Qt::RightButton){ //鼠标左键和右键同时按下且移动this-setText(QString(鼠标左键合右键同时按下且移动));}else if(ev-buttons() Qt::NoButton){ //鼠标移动没有按下任何的按键this-setText(QString(鼠标移动%1,%2).arg(ev-x()).arg(ev-y()));} }void MyLabel::mouseReleaseEvent(QMouseEvent *ev){if(ev-button() Qt::RightButton){ //鼠标右键抬起this-setText(QString(鼠标右键抬起%1,%2).arg(ev-x()).arg(ev-y()));} }自定义的MyLabel类与主窗口上的Label组件绑定。 然后我们测试经过测试我们发现基本都能通过唯有一个当鼠标只移动没按下时没有反应这是因为我们在他未按下时没有对他进行追踪所以我们在构造函数中去添加一个函数。 这样就可以了 事件分发 事件对象创建完毕后Qt将这个事件传递给QObject::event()函数event()函数主要用于事件的分发一般情况下并不直接处理事件而是将这些事件按照他们不同的类型分发给不同的事件处理器event handler。 如果想在事件分发之前做一些额外的操作或屏蔽掉某些事件我们也可以重写event()函数。通过event-type()来确定事件的类型。 举例在窗口添加组件line edit我们约定其为电话号码并且只能输入数字最多可输入11位。 这个需求不敢说用信号槽一定不能做但是一定会很麻烦所以我们可以在事件分发中去做 我们首先还是要去自定义类去继承对应的组件类 现在类建完了那么就要去找需要重写的函数了 我们去父类中去通过模糊搜索event事件找到我们需要的相关事件 将这个事件粘贴到子类中然后我们还需要找到键盘释放的事件但我们发现父类中没有所以我们去爷爷类中寻找 我们找到了键盘释放函数并且还找到了一个事件分发函数将这两个函数也放到子类中去重写 然后将这三个函数在源文件中去定义 事件分发是在事件处理器之前发生的用来集中接收并分发各种类型的事件 在事件分发函数中去实现拦截非法字符 //事件分发集中接收并分发各种类型的事件 bool MyLineEdit::event(QEvent *event){if(event-type() QEvent::KeyPress){ //判断事件类型如果是键盘按下的事件QKeyEvent * pkey(QKeyEvent *)event; //已经做判断了所以可以强转为具体的事件了if(Qt::Key_0 pkey-key() pkey-key() Qt::Key_9 || pkey-key() Qt::Key_Backspace){ //0~9分发return QLineEdit::event(event); //调用父类的分发}else{ //不分发qDebug()event 拦截pkey-key();//return true; //代表的是当前事件已经被处理不需要分发了return false; //代表当前事件处理不了一般会转到父窗口处理}}return QLineEdit::event(event); //其他类型的事件仍要继续分发 }然后要将line edit提升为MyLineEdit 然后在键盘按下事件中实现将接收到的数字转为字符串并显示 此时我们在输入电话号时就只能输入数字了如果输入字母就会被拦截英文模式下 将电话号码存放到类成员属性中 我们再加一个限定条件让输入的字符串只能小于11位 但是还有一个问题如果我们输入的电话号码有误那我们不管点什么都会被拦截所以要再事件分发函数拦截条件中释放一个删除的口子 然后在键盘按下函数中做一个判断如果按下的是退格键就在结尾删除一位 到现在还没有结束我们的需求又增加了为了提高私密性我们想将中间的四位数字以*的形式显示 所以还要在判断中加上三组判断如果size小于3就正常输出如果大于3小于7就显示*最后大于七位就将前三位正常截取然后拼接四个 *在拼接上最后四位最后再去显示 当然在之前实现尾删除时最终显示也要显示带*的号码 键盘按下事件的完整实现 void MyLineEdit::keyPressEvent(QKeyEvent * pkey){if(pkey-key() Qt::Key_Backspace){ //结尾删除一位m_tel m_tel.left(m_tel.size()-1); //保留前面去除最后一位//this-setText(m_tel);this-setText(this-text().left(this-text().size()-1));}else if(m_tel.size()11){m_tel QString::number(pkey-key()-Qt::Key_0);this-setText(m_tel); //将接收到的数字转换为字符串并显示if(m_tel.size()3){this-setText(m_tel);}else if(3m_tel.size() m_tel.size() 7){QString tel m_tel.left(3);for(int i3;im_tel.size();i){tel*;}this-setText(tel);}else{QString tel m_tel.left(3)**** m_tel.right(m_tel.size()-7);this-setText(tel);}} }最后还剩一点我们此时的电话号码是带*加密的状态那么我们想把键盘释放事件也利用上在键盘释放中实现将完整电话号码显示出来我们约定在回车键抬起时弹出一个弹出框将完整电话号码显示出来 void MyLineEdit::keyReleaseEvent(QKeyEvent *event){//Qt::Key_Return 字母区的回车 Qt::Key_Enter 数字小键盘的回车if(event-key() Qt::Key_Return){ //如果是回车抬起QMessageBox::information(this,电话号码,m_tel);} }最后我们还记得之前在输入字母时会默认是中文如果是中文输入法那么就不会对字母拦截所以我们想把中文输入法禁用 在构造函数初始时调用一个禁用中文输入法的函数 MyLineEdit::MyLineEdit(QWidget *parent) : QLineEdit(parent) {this-setAttribute(Qt::WA_InputMethodEnabled,false); //禁用中文输入法 }最终窗口显示
http://www.hkea.cn/news/14422742/

相关文章:

  • 制作网页的三大技术是什么搜素引擎排名优化技术
  • 郑州网络营销网站如何把网站做好
  • 深圳网站优化提供商中国新冠疫苗接种率
  • 网站风格代码全能医院网站管理系统
  • 鹿岛建设 网站百度收录网站名
  • 网站空间域名一次性收费还是一年一算唯品会信息科技有限公司
  • 卖友情链接的哪来那么多网站贵州住房和城乡建设厅旧网站
  • 找人做网站去哪里找重庆网站建设选夹夹虫
  • 贵州省住房和城乡建设厅官网站郑州知名做网站公司有哪些
  • 计算机网络技术网站开发深圳 网站设计公司
  • 为什么我的网站做不起来宁波营销型网站建设首选
  • 深圳龙华建网站房产官网
  • 济南建站软件成都百度推广代理公司
  • 网站开发常用的前端框架个人可以做电视台网站吗
  • 音乐相册制作网站为什么计算机鄙视软工
  • 网站制作建设需求淘宝上的网站建设
  • 做app网站建设深圳学校网站定制设计
  • 官网型网站开发优秀定制网站建设案例
  • 住房和创新建设部网站wordpress如何管理员密码
  • 东莞网站建设 少儿托管wordpress 赚钱
  • ps做分享类网站效果图宣武青岛网站建设
  • 广东建设局网站室内设计作品集
  • 邯郸做wap网站建设想建设网站前期调研报告如何写
  • 网站首页布局有哪些网站建设案例包括哪些
  • 株洲网站排名优化网站建设哪
  • 常州做网站需要多少钱宁波网站推广大全
  • 潜江市网站苏州建设银行网站
  • 临淄网站制作价格低网站建设保定
  • 网站建设与管理 试题邯郸市教育考试院官网
  • 做美工一般用到的素材网站东莞保安公司招聘电话