本文内容皆为Qt 5.13版本。 使用 IDE为 QTCreator。若是 VS+QT插件环境则可能有略微差异。
推荐一个不错的图标网站,大部分资源都可以免费下载:
https://www.easyicon.net
1 Qt中按钮图标的设置
QIcon myicon1;
myicon1.addFile(tr(":/image/Resource/new.png"));
ui->new_btn->setIcon(myicon1);
ui->new_btn->setIconSize(ui->new_btn->size());
//ui.btn_calib->setIconSize(QSize(90, 90));
ui->new_btn->setStyleSheet("background-color:rgba(0,0,0,0)");//透明背景
ui->new_btn->setFocusPolicy(Qt::NoFocus);
//设置按钮悬停事件,鼠标移上去的时候变化光标样式
ui->new_btn->installEventFilter(this);//安装事件过滤器
setIcon的缺陷是无法自由调整图标和文字之间的间距。
为实现鼠标移上按钮时,光(鼠)标样式发生变化,需要重载public bool eventFilter方法:
bool mainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->new_btn || obj == ui->open_btn || obj == ui->add_up_btn
|| obj == ui->add_btn || obj == ui->add_down_btn
|| obj == ui->modify_btn || obj == ui->ensure_btn || obj == ui->delete_btn)
{
if (event->type() == QEvent::HoverEnter)
{
this->setCursor(Qt::PointingHandCursor);
}
else if (event->type() == QEvent::HoverLeave)
{
this->setCursor(Qt::ArrowCursor);
return true;
}
}
return QWidget::eventFilter(obj, event);
}
还有另一种设置图标和文字的方法(使用Qlabel和布局嵌入在自带的QpushButton中):
QLabel* label = new QLabel();
QLabel* label2 = new QLabel();
label2->setStyleSheet(QString("border:1px solid red;"));
label->setStyleSheet(QString("border:1px solid red;"));
label2->setPixmap(QPixmap(":/image/Resource/new.png"));
label->setText("123");
label->setFixedWidth(80);
QHBoxLayout* myLayout = new QHBoxLayout();
myLayout->addSpacing(10);
myLayout->addWidget(label2);
myLayout->addSpacing(30);
myLayout->addWidget(label);
myLayout->addStretch();
ui->pushButton->setLayout(myLayout);
网上还、还、有另一种设置按钮图标的办法(使用样式表 setStyleSheet)。
#include <QToolButton>
#include <QApplication>
QString FormStyleSheetString( const QString & name )
{
const QString thisItemStyle( "QToolButton:enabled { image: url(" + name + "_normal.png); } "
"QToolButton:pressed { image: url(" + name + "_pressed.png); } "
"QToolButton:disabled { image: url(" + name + "_disabled.png); } "
);
return thisItemStyle;
}
int main(int argc, char * argv[])
{
QApplication qapp(argc,argv);
QToolButton button;
button.setStyleSheet( FormStyleSheetString( "button" ) );
button.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
button.setIconSize(QSize(200,200));
button.show();
return qapp.exec();
}
2 按钮按下时浮动效果设置
void mainWindow::on_ensure_btn_pressed()
{
ui->ensure_btn->move(ui->ensure_btn->geometry().x(), ui->ensure_btn->geometry().y() + 6); //按下时Y坐标下移
}
void mainWindow::on_ensure_btn_released()
{
ui->ensure_btn->move(ui->ensure_btn->geometry().x(), ui->ensure_btn->geometry().y() - 6);//松开时Y坐标上移(还原位置)
}
3 QT的EXE程序图标设置
QT下执行程序的图标设置还没有一种跨平台的解决方案,这里介绍的时windows平台下的方法。
首先当然要准备一个.ico图标文件(假定为exe.ico),将其复制到工程目录当中(.pro文件所在的目录)。
然后在QT Creator中Ctrl+N或 File - New File or Project,选择General中的Text File,名称填写为.rc文件(如exeIcon.rc),在里面只用写一行:
IDI_ICON1 ICON DISCARDABLE "exe.ico"
编辑.pro文件,里面应该有:
DISTFILES += \
exeIcon.rc
在其下再添加一行(如果没有上面的内容也没事):
RC_FILE = \
exeIcon.rc
如下图:
最后重新编译一下,新生成的exe文件的图标就会变成exe.ico的样子