今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果。

这个问题对于新手而言,主要有以下几个难点:

1.继承QLineEdit控件

2.QSS设置QLineEdit的相关样式,可以省下很多代码

3.自定义相关事件

void mousePressEvent(QMouseEvent *event);  // 鼠标点击的时候,编程输入框
void keyPressEvent(QKeyEvent *event); // 按下Enter的时候,处理
void mouseMoveEvent(QMouseEvent *event); // 鼠标移动的时候,显示效果

OK,下面我们来一步步实现这个自定义控件。

首先,第一步你肯定是要创建一个新类继承QLineEdit, QtCreator会自动为你实现一些无关紧要的代码。

第二步用PhotoShop做一个突出的高亮图片,像QQ签名框上的那样:

第三步开始实现具体的代码了。

首先构造函数中需要设置一些QSS样式,这一步可以省下很多代码,具体样式对应的功能,请读者自行研究。

this->setStyleSheet("QLineEdit{ background:rgba(0,0,0,0%); border:1px; font:10pt}"
"QLineEdit:hover{ border-image:url(:/btn_background.png); }"
"QLineEdit:!hover{background:rgba(0,0,0,0%);}"
"QLineEdit:focus {background:white;border-image:none; border:1px groove lightgray; border-radius:2px}");

实现三个继承的事件函数:

void QSLineEdit::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Enter - 1)
this->clearFocus(); QLineEdit::keyPressEvent(event);
} void QSLineEdit::mousePressEvent(QMouseEvent *event)
{
this->setFocus();
this->setCursor(QCursor(Qt::IBeamCursor));
QLineEdit::mousePressEvent(event);
} void QSLineEdit::mouseMoveEvent(QMouseEvent *event)
{
if(this->hasFocus())
this->setCursor(QCursor(Qt::IBeamCursor));
else
this->setCursor(QCursor(Qt::ArrowCursor));
QLineEdit::mouseMoveEvent(event);
}

到这一步基本上实现全部效果了,但是有一个问题需要注意:当点击窗体其他地方的时候,这个自定义控件不会失去焦点,即时你继承focusOutEvent也不会;没办法,所以在窗体中多实现了一个事件mousePressedEvent

void Dialog::mousePressEvent(QMouseEvent *e)
{
leEdit->clearFocus();
QDialog::mousePressEvent(e);
}

至此OK,看起来很简单的问题,却想了我半天时间。源代码在:WidgetEdit.rar

转载请注明出处:http://www.cnblogs.com/xufeiyang/p/3310670.html

最新文章

  1. CString转换为LPSTR和LPSTR转化为CString
  2. Python入门3
  3. struts2中如何使用主题theme
  4. Javascript定时器(二)——setTimeout与setInterval
  5. zmq 学习笔记
  6. poj2780Linearity(多点共线)
  7. React组件二
  8. hdu2488 dfs
  9. HDU2066:一个人的旅行(Dijkstra)
  10. Thrift教程初级篇——thrift安装环境变量配置第一个实例
  11. mysql数据库误删除操作说明
  12. vue--动画收缩
  13. sql server 与 sql server compact 互相数据导入
  14. redis权限认证及登录
  15. Pandas 基础(6) - 用 replace() 函数处理不合理数据
  16. IScroll的那些事——内容不足时下拉刷新
  17. Window应急响应(一):FTP暴力破解
  18. leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
  19. SOA 解惑
  20. mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用

热门文章

  1. spring实战四之Bean的自动装配(注解方式)
  2. DFS POJ 2362 Square
  3. Period[HDU1358]
  4. 初识API函数
  5. Equipment Box[HDU1110]
  6. [Unity2D]脚本基类MonoBehaviour介绍
  7. 【BZOJ】2875: [Noi2012]随机数生成器(矩阵乘法+快速乘)
  8. UOJ#35 后缀排序
  9. JBPM表达业务流程(流程定义语言)
  10. c#委托事件及其讲解