[Qt] searchBox 搜索框实现
[Qt] searchBox 搜索框实现
也就是在lineEdit中加入button。在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉。
类中的IconHelper见我的另一篇博文:http://www.cnblogs.com/mdgsf/p/4841272.html
#ifndef CSEARCHBOX_H
#define CSEARCHBOX_H
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
class CSearchBox : public QWidget
{
Q_OBJECT
public:
explicit CSearchBox(QWidget *parent = 0);
~CSearchBox();
signals:
void sigSearch(QString str);
void sigClear();
protected:
bool eventFilter(QObject *obj, QEvent *event);
public slots:
void slot_text_Edited(QString str);
void slot_btn_clicked();
private:
QLineEdit *m_pLineEdit;
QPushButton *m_pBtn;
enum EBtnStatus{ESEARCH, ECLOSE};
EBtnStatus m_iCurBtnStatus;
};
#endif // CSEARCHBOX_H
#include "searchbox.h"
#include <QHBoxLayout>
#include <QKeyEvent>
#include "iconhelper.h"
CSearchBox::CSearchBox(QWidget *parent)
: QWidget(parent)
{
m_pLineEdit = new QLineEdit(this);
m_pBtn = new QPushButton(m_pLineEdit);
QSize size = QSize(20, m_pLineEdit->sizeHint().height());
m_pBtn->setMinimumSize(size);
m_pBtn->setMaximumSize(size);
m_pBtn->setFocusPolicy(Qt::NoFocus);
m_pBtn->setFlat(true);
m_pBtn->setCursor(QCursor(Qt::PointingHandCursor));
m_pBtn->setText(tr("Search"));
m_iCurBtnStatus = ESEARCH;
IconHelper::Instance()->SetIcon(m_pBtn, 0xf002);
//0xf002 is search btn icon
//0xf00d is close btn icon
QHBoxLayout *buttonLayout = new QHBoxLayout();
buttonLayout->setContentsMargins(0, 0, 0, 0);
buttonLayout->addStretch();
buttonLayout->addWidget(m_pBtn);
m_pLineEdit->setLayout(buttonLayout);
m_pLineEdit->setTextMargins(0, 1, size.width(), 1);
m_pLineEdit->installEventFilter(this);
QHBoxLayout *mainLayout = new QHBoxLayout();
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->addWidget(m_pLineEdit);
this->setLayout(mainLayout);
QString qss = QString("QPushButton {background: gray; color: white; border: 1 solid gray;min-width: 20px;}")
+ QString("QPushButton:hover {background: black; color: white; border: 1 solid black;}")
+ QString("QPushButton:pressed {background: white;color: black;}");
this->setStyleSheet(qss);
connect(m_pLineEdit, SIGNAL(textEdited(QString)),
this, SLOT(slot_text_Edited(QString)) );
connect(m_pBtn, SIGNAL(clicked()),
this, SLOT(slot_btn_clicked()));
}
CSearchBox::~CSearchBox()
{
}
void
CSearchBox::slot_text_Edited(QString str)
{
int iTextLen = str.size();
if(iTextLen == 0)
{
m_iCurBtnStatus = ESEARCH;
IconHelper::Instance()->SetIcon(m_pBtn, 0xf002);
emit sigClear();
}
else
{
m_iCurBtnStatus = ECLOSE;
IconHelper::Instance()->SetIcon(m_pBtn, 0xf00d);
}
}
void
CSearchBox::slot_btn_clicked()
{
if(m_iCurBtnStatus == ESEARCH)
{
//This is impossible
}
else
{
m_pLineEdit->clear();
m_pLineEdit->setFocus();
m_iCurBtnStatus = ESEARCH;
IconHelper::Instance()->SetIcon(m_pBtn, 0xf002);
emit sigClear();
}
}
bool
CSearchBox::eventFilter(QObject *obj, QEvent *event)
{
if(m_pLineEdit == qobject_cast<QLineEdit*>(obj))
{
QString str = m_pLineEdit->text().trimmed();
if( (str.size() > 0) &&
(event->type() == QEvent::KeyPress))
{
QKeyEvent *keyEvent = (QKeyEvent*)(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
{
m_pLineEdit->setFocus();
emit sigSearch(str);
return true;
}
}
}
return QObject::eventFilter(obj, event);
}
//调用方式
CSearchBox *pSearchBtn = new CSearchBox(ui->widget);
connect(pSearchBtn, SIGNAL(sigSearch(QString)),
this, SLOT(slot_getSearchInfo(QString)) );
void
Widget::slot_getSearchInfo(QString str)
{
QMessageBox::information(this, "test", str);
}
[Qt] searchBox 搜索框实现的更多相关文章
- 第二百一十节,jQuery EasyUI,SearchBox(搜索框)组件
jQuery EasyUI,SearchBox(搜索框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 SearchBox(搜索框)组件的使用方法,这个组 ...
- SearchBox( 搜索框) 组件
一. 加载方式//class 加载方式<input id="ss" class="easyui-searchbox" style="width: ...
- EasyUI - SearchBox 搜索框
效果: html代码: <input id="ss"/> <div id="mm"> <div data-options=&quo ...
- Qt之自定义搜索框
简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...
- 【Qt】Qt之自定义搜索框【转】
简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...
- EasyUI基础searchbox&progressbar(搜索框,进度条)
easyui学习的基本组成部分(八个部分)硕果仅存searchbox和pargressbar.tooltip该,有一点兴奋.本文将偏向searchbox和pargressbar做一个探讨.鉴于双方的内 ...
- qt自己定义搜索框(超简单,带效果图)
1. 什么也不要说.先上效果图: 2. 代码 头文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #include <QLineEdit&g ...
- Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)
简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...
- Qt 搜索框
一.前言 用户需要输入文本时,可使用QLineEdit控件进行编辑输入,缺点是样式相对单一. 在使用百度搜索输入框时,发觉比较人性化,故采用QLineEdt+QPushButton通过css样式实现自 ...
随机推荐
- lesson8:AtomicInteger源码解析及性能分析
AtomicInteger等对象出现的目的主要是为了解决在多线程环境下变量计数的问题,例如常用的i++,i--操作,它们不是线程安全的,AtomicInteger引入后,就不必在进行i++和i--操作 ...
- DevExpress之时间控件
dateEdit和timeEdit 基本属性 DisplayFormat.FormatString-------失去焦点是控件显示的格式,timeEdit用不上 EditMask----------- ...
- Android学习路线(二十七)键值对(SharedPreferences)存储
假设你又一个相对较小的键值对数据想要保存,你应该使用SharedPreferences APIs.一个SharedPreferences 对象指向一个包括键值对的文件,它提供简单的方法来读写他们.每一 ...
- php 回调函数
publicfunction transaction(Closure $callback){ $this->beginTransaction(); // We'll simply ...
- HDU 5067-Harry And Dig Machine(DFS)
Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- MySQL加密的性能测试
这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...
- ViewDragHelper详解
2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDra ...
- extJs项目实战
extjs是因为在公司用到一次,也是公司唯一一个extjs的项目,当时拿到这个需求的时候,我有点懵逼,这他妈的什么鬼,参加工作两年不到的纯小白,没办法,这是工作,必须要完成的.硬着头皮做吧,好在最后弄 ...
- 打开新窗口(window.open)
open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选参数,在窗口中要显示网页的网址或路 ...
- IE浏览器下a标签嵌套img标签默认带有边框
最近写在线主页时发现IE浏览器下a标签嵌套img标签默认带有边框: 解决办法:img{border:0 none;} 注意,严格意义上0和none都要加上!