问题
当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文件更改这个控件的外观了!
想要解决的话,可以看下面这篇博客
523





