c语言 搜索栏,[Qt] searchBox 搜索框实现

[Qt] searchBox 搜索框实现

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

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

#ifndef CSEARCHBOX_H

#define CSEARCHBOX_H

#include

#include

#include

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

#include

#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(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);

}

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

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

SearchBox( 搜索框) 组件

一. 加载方式//class 加载方式

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

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

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

随机推荐

无线Web开发经验谈

http://am-team.github.io/amg/dev-exp-doc.html

ORA-27092: size of file exceeds file size limit of the process

停数据库时遇到下述问题: $ ./addbctl.sh stop You are running addbctl.sh version 120.1 Shutting down database UAT ...

在win server 2003上安装SQL Server 2008的步骤

1.安装Microsoft .NET Framework 3.5 Service Pack 1,下载地址:http://www.microsoft.com/zh-cn/download/confirm ...

Java线程同步_1

Java线程同步_1 synchronized 该同步机制的的核心是同步监视器,任何对象都可以作为同步监视器,代码执行结束,或者程序调用了同步监视器的wait方法会导致释放同步监视器 synchron ...

Firefox中firebug和xpath checker工具的使用

一直想把自己这段时间做的东西整理下,确迟迟没有动手,现在信息抽取工作已经做的差不多,把自己感觉很好用的两个工具介绍给大家吧!    Firefox真是一个好东西,它许多插件.本人是很讨厌插件的,每次电 ...

Eclipse设置合适的字体

一直使用Eclipse开发,最近感觉Comic Sans MS不错,但我的eclipse的默认字体里没有. 如果系统里有这个字体的话,那可以很简单的将这个字体添加到Eclipse中: Windows ...

【Lucene3.6.2入门系列】第10节_Tika

首先贴出来的是演示了借助Tika创建索引的HelloTikaIndex.java PS:关于Tika的介绍及用法,详见下方的HelloTika.java package com.jadyer.luce ...

WPF 自定义TextBox

1.TextBox前加图标. 效果: &lt ...

Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件

Allegro PCB Design GXL (legacy) version 16.6-2015 参考:https://blog.csdn.net/qq_29761395/article/detai ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值