#ifndef SEARCHEDIT_H
#define SEARCHEDIT_H
#include <QLineEdit>
#include <QStringList>
#include <QStringListModel>
#include <QCompleter>
#include <QPushButton>
#include <QHBoxLayout>
class SearchEdit : public QLineEdit
{
Q_OBJECT
public:
explicit SearchEdit(QWidget *parent = nullptr);
~SearchEdit();
signals:
public slots:
void editingFinishedslot();
void rmtextall();
void search();
private:
QStringList stringlist;
QStringListModel *model;
QCompleter *completer;
QPushButton *searchbtn;
QPushButton *deletebtn;
QHBoxLayout *layout;
};
#endif // SEARCHEDIT_H
#include "searchedit.h"
#include <QDebug>
#include <QMargins>
#include <QFont>
SearchEdit::SearchEdit(QWidget *parent)
: QLineEdit(parent)
{
searchbtn=new QPushButton;
deletebtn=new QPushButton;
layout=new QHBoxLayout;
searchbtn->setCursor(Qt::PointingHandCursor);
searchbtn->setFixedSize(16, 16);
searchbtn->setToolTip(QStringLiteral("搜索"));
searchbtn->setStyleSheet("QPushButton{border-image:url(:/search.png); background:transparent;} \
QPushButton:hover{border-image:url(:/search (1).png);} \
QPushButton:pressed{border-image:url(:/search (2).png);}");
deletebtn->setCursor(Qt::PointingHandCursor);
deletebtn->setFixedSize(16, 16);
deletebtn->setToolTip(QStringLiteral("删除"));
deletebtn->setStyleSheet("QPushButton{border-image:url(:/Delete Icon.png); background:transparent;} \
QPushButton:hover{border-image:url(:/Delete Icon (1).png);} \
QPushButton:pressed{border-image:url(:/Delete Icon (2).png);}");
setTextMargins(3,0,searchbtn->width()*2+10,0);
this->setPlaceholderText(QStringLiteral("请输入搜索内容"));
layout->addStretch();
layout->addWidget(deletebtn);
layout->addWidget(searchbtn);
layout->addSpacing(0);
layout->setContentsMargins(0, 0, 3, 0);
this->setLayout(layout);
stringlist<<"python"<<"PY"<<"php";
model=new QStringListModel(stringlist);
completer=new QCompleter(stringlist,parent);
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setModel(model);
setCompleter(completer);
connect(this,&SearchEdit::editingFinished,this,&SearchEdit::editingFinishedslot);
connect(deletebtn,&QPushButton::clicked,this,&SearchEdit::rmtextall);
connect(searchbtn,&QPushButton::clicked,this,&SearchEdit::search);
}
SearchEdit::~SearchEdit()
{
delete layout;
delete model;
delete completer;
delete searchbtn;
delete deletebtn;
}
void SearchEdit::editingFinishedslot()
{
QString text = this->text();
if(QString::compare(text, QString("")) != 0)
{
bool is_contains = stringlist.contains(text, Qt::CaseInsensitive);
if(!is_contains)
{
stringlist<<text;
model->setStringList(stringlist);
}
}
}
void SearchEdit::rmtextall()
{
this->clear();
}
void SearchEdit::search()
{
qDebug()<<this->text();
}