1、目的
使用一张图片来实现QToolButton控件两种状态(ON和OFF状态)的图标。前提不能使用两张图片,也不能使用setEnable来图标变灰,因为当设置了false之后,控件将不能再切换了。
2、方法
知道可以通过QToolButton有setIcon()来控件设置图标,所以可以绑定信号槽,通过控件状态来改变图标,从达到两种状态的不同图标。而改变图标的状态有枚举QIcon::Mode
。
这里使用其中两种状态
QIcon::Normal
图标的正常状态(ON状态)
QIcon::Disabled
图标的变灰状态(OFF状态)
3、代码
/// 初始化
QToolButton* toolBtn = new QToolButton(wid);
toolBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置控件上部分为图标,下部分为文本
toolBtn->setFixedSize(100,100); // 固定控件大小
toolBtn->setIconSize(QSize(50,50)); // 固定图标大小
toolBtn->setText("ON");
toolBtn->setCheckable(true);
toolBtn->setChecked(true);
changeIconStatus(toolBtn,true);
connect(toolBtn,SIGNAL(clicked(bool)),this,SLOT(slotBtnClicked(bool)));
/// 槽函数
void MainWindow::slotBtnClicked(bool checked)
{
QToolButton *toolBtn = qobject_cast<QToolButton*>(sender());
if(!toolBtn) return;
changeIconStatus(toolBtn,checked);
}
/// 改变toolBtn图标状态,并改变文本
void MainWindow::changeIconStatus(QToolButton *toolBtn,bool checked)
{
QString iconPath = ":/images/Qt.png";
QIcon icon(iconPath);
QPixmap pix = icon.pixmap(50, 50, checked?QIcon::Normal:QIcon::Disabled);
toolBtn->setIcon(pix);
if(checked){
toolBtn->setText("ON");
}else{
toolBtn->setText("OFF");
}
}
效果
对你有用就点个赞👍,以后需要用到就收藏⭐