今天鼓捣了半天,终于实现了自定义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

QLineEdit 仿QQ签名框的更多相关文章

  1. QLineEdit 仿QQ签名框(思路很独特:用QSS::hover显示额外的图片)

    今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果. 这个问题对于新手而言,主要有以下几个难点: 1.继承QLineEdit控件 2.QSS设置QLineEdit的相关样式,可以 ...

  2. [Qt] QLineEdit 仿QQ签名框

    今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果. 这个问题对于新手而言,主要有以下几个难点: 1.继承QLineEdit控件 2.QSS设置QLineEdit的相关样式,可以 ...

  3. WPF仿QQ聊天框表情文字混排实现

    原文:WPF仿QQ聊天框表情文字混排实现 二话不说.先上图 图中分别有文件.文本+表情.纯文本的展示,对于同一个list不同的展示形式,很明显,应该用多个DataTemplate,那么也就需要Data ...

  4. js五道经典练习题--第二道仿qq聊天框

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  5. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

  6. jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)

    1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  7. wpf实现仿qq消息提示框

    原文:wpf实现仿qq消息提示框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/5052 ...

  8. < JAVA - 大作业(2)仿qq即时通讯软件 >

    < JAVA - 大作业(2)仿qq即时通讯软件 > 背景 JAVA上机大作业:设计一个仿qq即时通讯软件 任务简要叙述:设计一款仿QQ的个人用户即时通讯软件,能够实现注册,登陆,与好友聊 ...

  9. 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口

    印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...

随机推荐

  1. 工具篇-MAT(Memory Analyzer Tool)

    --- layout: post title: 工具篇-MAT(Memory Analyzer Tool) description: 让内存泄漏无所遁形 2015-10-08 category: bl ...

  2. ThinkPHP - 组织分类结构

  3. C++对C语言的非面向对象特性扩充(1)

    我将分3篇来介绍C++相对于C在非对象特性上的扩充,今天要讲的是C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较. 1.C++注释除了包括原有C的块注释/* ...

  4. C++日期和时间

    C++ 日期 & 时间 C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数.为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <c ...

  5. JavaSE学习总结第09天_面向对象4

      09.01 final关键字引入 例: class Fu { public final void show() { System.out.println("访问底层资源"); ...

  6. Android Bug 记录

    1.Unable to resolve target 'android-5' 无法解析目标 ' 安卓系统-5'      Unable to resolve target 'Google Inc.:G ...

  7. Centon6.5虚拟机桥接设置

    参考资料:http://blog.csdn.net/iamfafa/article/details/6209009 安装虚拟机的时候 就直接选择桥接,可以直接 使用 查看此状态下的配置如下 : 虚拟环 ...

  8. UNIX网络编程 12 15共享内存区

    管道,FIFO,消息队列,在两个进程交换信息时,都要经过内核传递 共享内存可以绕过,默认fork生成的子进程 并不与父进程共享内存区 mmap munmap msync 父子进程共享内存区的方法之一是 ...

  9. PROPAGATION_REQUIRED

    PROPAGATION_REQUIRED (2009-05-13 13:26:52) 转载▼   事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传 ...

  10. vs提示“当前不会命中断点,源代码与原始版本不同”的一种解决办法

    将出问题的cpp文件用notepad打开,另存为‘unicode’类型,覆盖源文件即可