[Qt] searchBox 搜索框实现

也就是在lineEdit中加入button。在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉。

类中的IconHelper见我的另一篇博文:http://www.cnblogs.com/mdgsf/p/4841272.html

//searchbox.h

#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

//searchbox.cpp

#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 搜索框实现的更多相关文章

  1. 第二百一十节,jQuery EasyUI,SearchBox(搜索框)组件

    jQuery EasyUI,SearchBox(搜索框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 SearchBox(搜索框)组件的使用方法,这个组 ...

  2. SearchBox( 搜索框) 组件

    一. 加载方式//class 加载方式<input id="ss" class="easyui-searchbox" style="width: ...

  3. EasyUI - SearchBox 搜索框

    效果: html代码: <input id="ss"/> <div id="mm"> <div data-options=&quo ...

  4. Qt之自定义搜索框

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  5. 【Qt】Qt之自定义搜索框【转】

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...

  6. EasyUI基础searchbox&amp;progressbar(搜索框,进度条)

    easyui学习的基本组成部分(八个部分)硕果仅存searchbox和pargressbar.tooltip该,有一点兴奋.本文将偏向searchbox和pargressbar做一个探讨.鉴于双方的内 ...

  7. qt自己定义搜索框(超简单,带效果图)

    1. 什么也不要说.先上效果图: 2. 代码 头文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #include <QLineEdit&g ...

  8. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  9. Qt 搜索框

    一.前言 用户需要输入文本时,可使用QLineEdit控件进行编辑输入,缺点是样式相对单一. 在使用百度搜索输入框时,发觉比较人性化,故采用QLineEdt+QPushButton通过css样式实现自 ...

随机推荐

  1. Keil IDE指南.

    Keil IDE指南(转载) 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的 ...

  2. VCS仿真查看coverage

    VCS仿真查看coverage Design compiler & simulate #!/bin/csh -f setenv NOVAS_HOME /EDASynopsys/verdi3-I ...

  3. NS2仿真:两个移动节点网络连接及协议性能分析

    NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...

  4. extJs项目实战

    extjs是因为在公司用到一次,也是公司唯一一个extjs的项目,当时拿到这个需求的时候,我有点懵逼,这他妈的什么鬼,参加工作两年不到的纯小白,没办法,这是工作,必须要完成的.硬着头皮做吧,好在最后弄 ...

  5. Menu( 菜单)

    一. 加载方式菜单组件通常用于快捷菜单,在加载方式上,通过 class 或 JS 进行设置为菜单组件.然后,再通过 JS 事件部分再响应.//class 加载方式<div id="bo ...

  6. OD: Shellcode / Exploit & DLL Trampolining

    看到第五章了. 标题中 Dll Tramplining(跳板)名字是从如下地址找到的,写的很好: http://en.wikipedia.org/wiki/Buffer_overflow#The_ju ...

  7. 状态压缩dp zoj3802

    做这个题的时候看了看时间复杂度觉得应该是个贪心或者dp,然后贪心又很快被否定了,因为不具备贪心的一些特性,想了想觉得没什么思路.看了下网上的思路,真是让人拍案叫绝,算法的魅力就在于此啊.. 首先dp就 ...

  8. 《APUE》读书笔记第十二章-线程控制

    本章中,主要是介绍控制线程行为方面的内容,同时介绍了在同一进程中的多个线程之间如何保持数据的私有性以及基于进程的系统调用如何与线程进行交互. 一.线程属性 我们在创建线程的时候可以通过修改pthrea ...

  9. U盘装系统系列一—-安装老毛桃U盘启动制作工具

    今天跟大家分享下如何制作U盘启动盘,通过U盘启动来安装操作系统.U盘便于携带,同时能解决光驱出问题装不了系统的麻烦,可谓是装机利器!我一直用的都是老毛桃的U盘启动制作工具,很好用,很强大,就以它来演示 ...

  10. Arduino 板子 COM 接口找不到设备

    复位 Arduino 板子   1.打开官方的blink程序. 2.重新拔插usb. 3.点下载. 4.按住左上角的复位按键不放. 5.等显示开始下载瞬间松开按键.把握住那个瞬间. 6.多试验几次看能 ...