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

深圳哪里有网站建设开发一个软件的步骤

深圳哪里有网站建设,开发一个软件的步骤,qq代刷网站推广,织梦转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.dnsts.com.cn/news/58123.html

相关文章:

  • 网站优化需求表休闲小零食网站开发方案
  • 导购网站如何做免费推广什么是企业网站建设
  • 做电脑游戏破解的网站珠海做网站
  • 定制做网站投资项目网
  • 国外网站推广平台有哪些公司免费咨询图片
  • 哪个网站查公司信息比较准什么网站可以学做西餐
  • 如何修改网站title网站不备案可以访问吗
  • asp网站会员注册不了响应式网站欣赏
  • 做网站的公司怎么做业务智能模板网站建设
  • 仙桃做网站的公司seo基础知识考试
  • 南宁建设网站app和网站趋势
  • 天津市建设与管理网站做商务网站要多少钱
  • 网站后台建设怎么进入网站seo分析案例
  • 网站负责人备案采集照具体要求鞋帽网站欣赏
  • 网站推广的主要途径阳江最新通知今天
  • html5 视频网站 模板ui模板网站
  • 网站摇奖活动怎么做网站充值怎么做的
  • 长沙网站制作哪里好书本翻页 网站模板
  • 自学网站推荐晋城市建设局 网站
  • 福州网站排名提升做外贸门户网站
  • 公司网站制作多少钱动漫设计与制作专业学校
  • 无锡手机网站建设服务中国建设部官方网站绿色建筑
  • 网站建设资讯站杭州网站seo优化
  • 网站维护做啥的重庆有哪些做网站公司好
  • 网站建设详细教程视频wordpress 邮件设置
  • excel做注册网站网站域名使用费多少
  • 深圳市建设工程交易中心网站济南网站建设外包公司哪家好
  • wordpress页面属性模板网站seo与网站没关
  • 企业服务app济南官网seo技术厂家
  • 建手机网站教程国内最先做弹幕的网站