Qt自定义SearchLine控件--实现按钮及相应功能

最近迷上了自定义一些简单的控件,今天看一个搜索框的自定义。实现的功能是:

  • 在 QLineEdit 的末尾添加一个 button ,这个button 就是我们常见的搜索按钮
  • 点击按钮后可模拟发送 QLineEdittextEdited 信号
  • 这个搜索框可以存储一些数据

效果如下:

在这里插入图片描述

我们选择继承 QLineEdit 类来实现,这样是最简单最快的方式。

class SearchLine : public QLineEdit
{
	Q_OBJECT

public:
	explicit SearchLine(QWidget* parent = nullptr);

	~SearchLine();

	void setData(const QVariant& data)
	{
		m_data = data;
	}

	QVariant data() const
	{
		return m_data;
	}

private:
	void initPage();

private:
	QVariant m_data{ QVariant() };
};

看上面的类的定义,基本上是只有一个函数的。

void SearchLine::initPage()
{
	this->setProperty("type", "search");
	
	auto* btn = new QPushButton();
	auto* layout = new QHBoxLayout();
	layout->addStretch();
	layout->addWidget(btn);
	layout->setContentsMargins(0, 5, 0, 0);
	this->setLayout(layout);
	btn->setProperty("type", "search");
	connect(btn, &QPushButton::clicked, this, [this]()
	{
		emit textEdited(this->text());
	});
}

函数的功能是很简单的,在构造的时候调用,在QLineEdit 上new 一个 QPushbutton,并且将QPushbutton移到 QLineEdit 的末尾。使得该按钮被点击的时候发送 textEdit 信号即可。

下面是对该控件的样式表,当然样式表的设计肯定是自己来搞,毕竟每个工程都大同小异,但还是会有一些稍微的差别。

QLineEdit[type="search"]
{
	border: 1px solid #CCCCCC;
	border-radius:4px;
	font-size:14px;
	color:#262626;
	width:280px;
	height:30px;
}

QLineEdit[type="search"]:hover
{
	border: 1px solid #a1a0a0;
}

QLineEdit:selected
{
	border:1px solid #4691EE;
	border-radius:4px;
}

QPushButton[type="search"]
{
	border-image: url(:/searchline/search.png);
	qproperty-minimumSize: 24px 24px;
	qproperty-maximumSize: 24px 24px;
}
QPushButton[type="search"]:hover
{
	border-image: url(:/searchline/search_hover.png);
}
QPushButton[type="search"]:pressed
{
	border-image: url(:/searchline/search_pressed.png);
}

使用也是简单,新建 QLineEdit ,并将一个 QLineEdit 提升为 SearchLine 即可。

测试代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值