Qt有丰富的样式表,可以很方便的改变界面的风格,下面给出Qt按钮添加图片的方法,直接用setIcon的方法,图片会被缩放,下面的方法正常显示
//设置按钮图标,按钮的默认大小是 30*30,可以自己指定
void setButtonImage(QPushButton *button, QString image)
{
button->setText("");
QPixmap pixmap(image);
QPixmap fitpixmap = pixmap.scaled(30, 30, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
button->setIcon(QIcon(fitpixmap));
button->setIconSize(QSize(30, 30));
button->setFlat(true);
button->setStyleSheet("border: 0px"); //消除边框
}
注意:按钮上的文本得去掉,不然图片位置会变动,image可以是qrc里的文件。
如果公司有美工,可提供三态图片,那更方便,直接用背景图片修改,qss代码如下:
/*正常显示*/
QPushButton
{
background-image:url(":/demo/pictures/1.png");
border:none;
}
/*鼠标悬浮*/
QPushButton:hover
{
background-image:url(":/demo/pictures/2.png");
border:none;
}
/*按钮按下*/
QPushButton:pressed
{
background-image:url(:/demo/pictures/3.png);
border:none;
}
如需要全局设置qss, 那么需要用#指定某个按钮,如下:
QPushButton#btnOpen:hover
{
...
...
}
注意:图片的名字不能包含特殊字符,例如@、¥等,包含特殊字符的图片在用代码setStyleSheet设置样式时可能无效.
在用样式表时,同样要把按钮的文字去掉设为空,且按钮的固定大小设成和图片相同。
例如要实现下面的效果
qss代码:
QPushButton
{
background-image:url(":/resources/user.png");
background-position:center;
background-repeat: no-repeat;
border:none
}
QPushButton:hover
{
background-color:rgb(10,210,210);
background-image:url(":/resources/user_hover.png")
}
QPushButton:pressed
{
background-color:rgb(10,210,210);
background-image:url(":/resources/user.png");
padding-left:8px;
padding-top:8px;
}
qss可以设置很多效果,需要搭配实现。