关于QToolButton文字和图标同时存在时,无法在伪状态下更改图标

问题

QToolButton设置setToolButtonStyle(Qt::ToolButtonTextBesideIcon)时,此时文字和图标同时存在,但是有一个问题就是如果你想更改伪状态下的图标,就只能重新调用setIcon函数,然后切回普通形态还要再调用一次setIcon来设置原来的图标,这就很反人类!

解决思路

重构QToolButton类,捕捉toggled信号自动调用setIcon函数

class TQToolButton :public QToolButton
{
	Q_OBJECT

public:
	TQToolButton(QWidget *parent);
	~TQToolButton();
	void setCheckedIcon(QIcon icon, bool flag = false);

private:
	QIcon m_icon;
	QIcon m_icon_true;

};
TQToolButton::TQToolButton(QWidget * parent)
	:QToolButton(parent)
{
	connect(this, &QToolButton::toggled, [=](bool flag) {flag ? setIcon(m_icon_true) : setIcon(m_icon); });
}

TQToolButton::~TQToolButton()
{
}

void TQToolButton::setCheckedIcon(QIcon icon, bool flag)
{
	if (!flag)
		setIcon(icon);
	flag ? m_icon_true = icon : m_icon = icon;
}

使用时直接通过setCheckedIcon设置普通状态下和选中状态下的图标即可

TQToolButton *m_search_image = new TQToolButton(this);
m_search_image->setCheckedIcon(QIcon(":/logon/Picture/logon/close1.png"));
m_search_image->setCheckedIcon(QIcon(":/logon/Picture/logon/close2.png"),true);
m_search_image->setIconSize(QSize(20, 20));
m_search_image->setText("图片搜索");
m_search_image->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
m_search_image->setCheckable(true);

不过这个方法存在一个问题,就是无法使用QSS文件更改这个控件的外观了!
想要解决的话,可以看下面这篇博客

QT自定义控件状态

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值