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

网站缓存实例龙华网站网页设计

网站缓存实例,龙华网站网页设计,wordpress 4.9.8主题,重庆建设安全管理网站本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题#xff01; 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineed…本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineeditfocus.h lineeditfocus.cpp widget.cpp 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit class LineEditFocus : public QLineEdit {Q_OBJECT public:explicit LineEditFocus(QWidget *parent nullptr) { }~LineEditFocus() override { } } 2.重写 focusOutEvent protected:// 焦点离开void focusOutEvent(QFocusEvent *event) override { }// 获得焦点void focusInEvent(QFocusEvent *event) override { } 当获得焦点时focusInEvent方法会被触发当失去焦点时focusOutEvent方法会被触发 然后就可以在方法内部做一些我们的需求处理例如可以通过信号与槽通知主程序等 3.使用 直接使用我们自定义的类创建LineEditFocus对象即可 如果使用的是ui布局中的部件那么可以将部件提升为我们自定义的LineEditFocus即可 二、失去焦点事件问题 1.问题描述 如果有多个输入框部件且当前输入框部件失去焦点且另一个获得焦点的部件不是输入框时那么是没有问题的 如果当前输入框失去焦点且另一个获得焦点的部件也是输入框那么这样就会出现问题 会优先触发另一个输入框的失去焦点事件然后才会触发当前输入框的失去焦点事件最后再触发另一个输入框的获得焦点事件 案例 (1).继续在自定义类中添加信号 可以根据个人需求传输参数值例如可以将当前输入框的文本传送 signals:void signalLoseFocus(int index); (2).然后在失去焦点方法中触发此信号 void LineEditFocus::focusOutEvent(QFocusEvent *event) {static int index 1;emit signalLoseFocus(index);QLineEdit::focusOutEvent(event); } (3).最后在主窗体中使用即可ui部件提升即可 void Widget::init() {LineEditFocus *le1 new LineEditFocus(this);LineEditFocus *le2 new LineEditFocus(this);LineEditFocus *le3 new LineEditFocus(this);QListLineEditFocus * list;list le1 le2 le3;foreach (LineEditFocus *lef, list) {lef-setFixedSize(350, 50);connect(lef, LineEditFocus::signalLoseFocus, this, Widget::onLeaveFocus);}QVBoxLayout *layout new QVBoxLayout(this);layout-addWidget(le1);layout-addWidget(le2);layout-addWidget(le3);this-setLayout(layout); } (4).在槽函数中将接收到的index通过messagebox提示出来 void Widget::onLeaveFocus(int index) {QMessageBox::information(this, 提示, QString(输入框焦点离开%1).arg(index)); } (5).运行效果 可以看出确实是有问题的 2.问题解决 具体是什么原因导致出现这样的问题我也没搞明白 但是办法总比困难多我们转换一下思路去解决他 (1).增加变量用于标志是否获取到了焦点 private:// 焦点获得标志bool m_focus; (2).焦点获得获得焦点时m_focus赋值true void LineEditFocus::focusInEvent(QFocusEvent *event) {m_focus true; // 标志当前编辑框已经获得焦点QLineEdit::focusInEvent(event); } (3).失去焦点通过m_focus变量辅助配合判断 void LineEditFocus::focusOutEvent(QFocusEvent *event) {if (m_focus event-lostFocus()) { // event-lostFocus(): type() FocusOutm_focus false; // 焦点失去emit signalLoseFocus(m_index);}QLineEdit::focusOutEvent(event); } 通过上面的测试可知当从第一个输入框点击第二个输入框时优先触发第二个输入框的失去焦点事件此时第二个输入框是还没有获得焦点的即m_focus变量值为false信号就没法触发 紧接着第一个输入框的失去焦点事件触发因为先前已经获得了焦点即m_focus变量值为true所以第一个输入框的失去焦点事件可以正常发射信号 最后才会触发第二个输入框的获得焦点事件。 (3).运行测试 问题完美解决 三、源码分享 lineeditfocus.h #ifndef LINEEDIT_FOCUS_H #define LINEEDIT_FOCUS_H#include QLineEditclass LineEditFocus : public QLineEdit {Q_OBJECT public:explicit LineEditFocus(QWidget *parent nullptr);~LineEditFocus() override;void SetIndex(int index);int GetIndex() const;signals:void signalLoseFocus(int index);void signalInFocus(int index);protected:// 焦点离开void focusOutEvent(QFocusEvent *event) override;// 获得焦点void focusInEvent(QFocusEvent *event) override;private:// 记录标志int m_index;// 焦点获得标志bool m_focus; };#endif // LINEEDIT_FOCUS_Hlineeditfocus.cpp #include lineeditfocus.h#include QFocusEventLineEditFocus::LineEditFocus(QWidget *parent) : QLineEdit(parent) {m_index 0;m_focus false; }LineEditFocus::~LineEditFocus() {}void LineEditFocus::SetIndex(int index) {m_index index; }void LineEditFocus::focusOutEvent(QFocusEvent *event) {if (m_focus event-lostFocus()) { // event-lostFocus() -- return type() FocusOut;m_focus false; // 焦点失去emit signalLoseFocus(m_index);}QLineEdit::focusOutEvent(event); }void LineEditFocus::focusInEvent(QFocusEvent *event) {m_focus true; // 焦点获得QLineEdit::focusInEvent(event); } widget.cpp #include widget.h #include ui_widget.h#include lineeditfocus.h#include QMessageBoxWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui-setupUi(this);init(); }Widget::~Widget() {delete ui; }void Widget::init() {LineEditFocus *le1 new LineEditFocus(this); // le1-setFixedSize(350, 50); // le1-SetIndex(1);LineEditFocus *le2 new LineEditFocus(this); // le2-setFixedSize(350, 50); // le2-SetIndex(2);LineEditFocus *le3 new LineEditFocus(this); // le3-setFixedSize(350, 50); // le3-SetIndex(3);QListLineEditFocus * list;list le1 le2 le3;int index 1;foreach (LineEditFocus *lef, list) {lef-setFixedSize(350, 50);lef-SetIndex(index);connect(lef, LineEditFocus::signalLoseFocus, this, Widget::onLeaveFocus);}QVBoxLayout *layout new QVBoxLayout(this);layout-addWidget(le1);layout-addWidget(le2);layout-addWidget(le3);this-setLayout(layout);}void Widget::onLeaveFocus(int index) {QMessageBox::information(this, 提示, QString(输入框焦点离开%1).arg(index)); } 完
http://www.dnsts.com.cn/news/217714.html

相关文章:

  • 网站开发用什么编辑器好点网站建设模板怎么直接套
  • 我的网站百度怎么搜索不到了优化大师卸载不了
  • 网站首页图片大全wordpress 图片的设置密码
  • 浏览网站模板手机网站模板案例
  • 网站都是用什么语言写的重庆市建设工程信息网登录入口
  • 网站建站代理加盟wordpress知更鸟菜单修改
  • 宁海有做网站的吗网站添加地图导航
  • 西宁seo网站建设top域名的网站
  • 郑州网站建站网站wordpress download文件
  • 淘宝网站代理怎么做的电商是做什么行业的
  • 医疗网站建设案例灵宝网站建设
  • 做公司月刊网站wordpress火车头采集
  • 芜湖网站建设优化怎么看一个网站的cms
  • 深圳招聘网站前十排名wordpress welcome
  • 摄影网站的市场可行性wordpress主题存放位置
  • 提升政务网站建设水平大连网站制作怎么做
  • 专门做钻石国外网站apple官网入口
  • 公司做网站推广要注意什么做旅游网约车的网站
  • 制作网站的钱淘金网站建设
  • 网站常州建设外包软件公司
  • 网站做扫一扫绿茵足球网站建设
  • 财务公司网站模板国外网站开发公司
  • 网站标头图片切换宿迁哪家做网站推广
  • 做再生料的网站网站开发的工资
  • 网站怎么做gps定位网站建设次年续费合同
  • 网站开发能干什么河南省建筑工程网
  • 头条淘宝联盟网站推广怎么做泊头网站排名优化
  • 大岭山仿做网站导入视频生成3d动画
  • 免费网站推广软件有哪些上海建设银行网站查询余额
  • 郑州网站建设鹏之信设计软件图标