[Qt] QLineEdit 仿QQ签名框
今天鼓捣了半天,终于实现了自定义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 - )
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
[Qt] QLineEdit 仿QQ签名框的更多相关文章
- QLineEdit 仿QQ签名框(思路很独特:用QSS::hover显示额外的图片)
今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果. 这个问题对于新手而言,主要有以下几个难点: 1.继承QLineEdit控件 2.QSS设置QLineEdit的相关样式,可以 ...
- QLineEdit 仿QQ签名框
今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果. 这个问题对于新手而言,主要有以下几个难点: 1.继承QLineEdit控件 2.QSS设置QLineEdit的相关样式,可以 ...
- WPF仿QQ聊天框表情文字混排实现
原文:WPF仿QQ聊天框表情文字混排实现 二话不说.先上图 图中分别有文件.文本+表情.纯文本的展示,对于同一个list不同的展示形式,很明显,应该用多个DataTemplate,那么也就需要Data ...
- 【Qt】仿QQ表情选择控件
表情选择控件在聊天应用中常常要用到,做起来尽管不复杂可是非常繁琐.特别是有些图标须要按顺序排列.每次重做必定是非常费时.所以我将聊天表情选择控件封装成一个独立的类QFaceSelectWid ...
- Qt QLineEdit 漂亮的搜索框 && 密码模式 && 格式化输入 && 提示文字 && 选择内容并移动 && 清除全部输入
先上一个漂亮的搜索框效果图, 输入搜索文本效果, 点击搜索图标效果: //实现代码 void MainWindow::iniLineEdit() { ui->lineEdit->setPl ...
- 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)
要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...
- js五道经典练习题--第二道仿qq聊天框
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
随机推荐
- JavaScript Ajax上传文件miniupload.js
用到jquery和layer.js (function ($) { $.fn.miniupload = function (options, callback) { var jqDom = $(thi ...
- Avito Cool Challenge 2018 Solution
A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...
- poj1106 Transmitters
地址:http://poj.org/problem?id=1106 题目: Transmitters Time Limit: 1000MS Memory Limit: 10000K Total S ...
- 报错org.openqa.selenium.WebDriverException: disconnected: unable to connect to renderer解决方法
做自动化时经常会遇到不兼容的问题,比如以下简单的脚本,主要是打开浏览器,然后最大化窗口,打开百度,输入内容搜索,代码如下: package com.gs.selenium; import org.op ...
- 几种Memcache的状态监控的工具,以及安装和使用【linux系统】
1.Memcache-top的简介及安装和用法 简介:memcache-top是用perl语言编写的,可以运行在term下.它能够像top一样显示各个memcached节点的状态变化,其中包括系统管理 ...
- linux实践--字符集
一.ASCII码 首先懂得ASCII码表 二 八 十 十六 缩写/字符 0000 0000 0 0 00 NUL(null) 0000 0001 1 1 01 SOH(start of headlin ...
- 20145311实验五"Java网络编程及安全"
20145311实验五 "Java网络编程及安全" 程序设计过程 实验内容 ·掌握Socket程序的编写:·掌握密码技术的使用:·设计安全传输系统 ·利用加解密代码包,编译运行代码 ...
- [BZOJ1176]Mokia
Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000 ...
- ACM赛前准备——模板(排版篇)
ACM赛前准备--模板(排版篇) 更新 前言 效果演示 封面 目录页 模板页(不分栏) 模板页(分栏) 结果文件 快速使用 准备工作 安装TexLive (可选)安装minted包 创建模板 文件结构 ...
- JavaScript获取输入框内容
html: <input name="money" type="number" placeholder="税前工资"><b ...