Qt中按钮图标的设置、按钮按下时浮动效果设置 以及 QT的EXE程序图标设置

本文内容皆为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的样子

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thequitesunshine007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值