热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

QtPushButton在hover时换图

现在要实现一个按钮中,左边是一个小图标,右边是文字。在鼠标移到按钮上时,换另外一个图标。小图标是使用icon加进去的。请问各位怎么有什么解决方案吗

#6


我使用重载实现了你的功能,可以看一下http://blog.csdn.net/z609932088/article/details/53301297

主函数
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton->setIcon(QIcon(":/picture.ico"));
    ui->pushButton->setStyleSheet("QPushButton:hover{QIcon(:/logo.ico);}");



}
重载。h
#ifndef M_PUSHBUTON_H
#define M_PUSHBUTON_H

#include 
#include 
class m_pushbuton : public QPushButton
{
public:
    m_pushbuton(QWidget *parent);
    void enterEvent(QEvent* event);
    void leaveEvent(QEvent* event);
};

#endif // M_PUSHBUTON_H
重载。cpp
#include "m_pushbuton.h"

m_pushbuton::m_pushbuton(QWidget *parent): QPushButton(parent)
{

}

void m_pushbuton::enterEvent(QEvent *event)
{
    this->setIcon(QIcon(":/logo.ico"));
}

void m_pushbuton::leaveEvent(QEvent *event)
{
    this->setIcon(QIcon(":/picture.ico"));
}


这里我写的比较简单了,你可以在重在函数中加个参数,来改变资源路径

#7


引用 5 楼 u010111033 的回复:
QPushButton:hover{ /*鼠标悬停在按钮上时*/
                         image: url(:/images/loadin.png);
}


他要的的Ico的那种格式,这样写,换成ioc文件Qt提示语法问题
pushButton->setStyleSheet("QPushButton:hover{QIcon(:/logo.ico);}");
抱错

#8


引用 1 楼 caihuisinx 的回复:
qss完全可以实现你需要的功能


求具体代码,我没有弄出来

#9


不要光盯着图标看,把图标和字做在一张图片里,normal时设置普通时的图片,hover时设置另一张,这样在qss里只需设置背景图即可

#10


QSS 不支持按钮的 hover 切换图片,需要处理鼠标事件实现

1
2
3
4
5
6
7
8
9
10
11
12
bool FramelessWindowCentralWidget::eventFilter(QObject *watched, QEvent *e) {<br>
    // 鼠标进入或离开关闭按钮时设置为不同状态的图标<br>
    if (watched == ui->closeButton) {<br>
        if (e->type() == QEvent::Enter) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close-hover.png"));<br>
        else if (e->type() == QEvent::Leave) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close.png"));<br>
        }<br>
    }<br>
<br>
    return QWidget::eventFilter(watched, e);<br>
}

#11


qt5.3以后 QSS 完全支持 前面版本没去试过
[code=css
]QPushButton {
border:none;
background-image: url(:xxx.png);
background-repeat:no-repeat;
        background-position: center;
}
QPushButton:hover {
background-image:url(:xxx.png);
}[/code]

#12


引用 10 楼 Inhibitory 的回复:
QSS 不支持按钮的 hover 切换图片,需要处理鼠标事件实现

1
2
3
4
5
6
7
8
9
10
11
12
bool FramelessWindowCentralWidget::eventFilter(QObject *watched, QEvent *e) {<br>
    // 鼠标进入或离开关闭按钮时设置为不同状态的图标<br>
    if (watched == ui->closeButton) {<br>
        if (e->type() == QEvent::Enter) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close-hover.png"));<br>
        else if (e->type() == QEvent::Leave) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close.png"));<br>
        }<br>
    }<br>
<br>
    return QWidget::eventFilter(watched, e);<br>
}


这个方法好,收藏了了,不过这个方法是不是需要给每个button都注册一个鼠标事件了


#13


引用 10 楼 Inhibitory 的回复:
QSS 不支持按钮的 hover 切换图片,需要处理鼠标事件实现

1
2
3
4
5
6
7
8
9
10
11
12
bool FramelessWindowCentralWidget::eventFilter(QObject *watched, QEvent *e) {<br>
    // 鼠标进入或离开关闭按钮时设置为不同状态的图标<br>
    if (watched == ui->closeButton) {<br>
        if (e->type() == QEvent::Enter) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close-hover.png"));<br>
        else if (e->type() == QEvent::Leave) {<br>
            ui->closeButton->setIcon(QIcon(":/icon/close.png"));<br>
        }<br>
    }<br>
<br>
    return QWidget::eventFilter(watched, e);<br>
}


感谢10楼,试了可用。要加一句。 button->installEventFilter(this);

#14


引用 5 楼 u010111033 的回复:
QPushButton:hover{ /*鼠标悬停在按钮上时*/
                         image: url(:/images/loadin.png);
}

这种不管用啊,你自己实现了吗?

#15


ico与png你可以用转换工具转变啊

#16


来给我邮箱,帮你搞个demo

推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 交互式左右滑动导航菜单设计
    本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 将开发分支合并到主分支的最佳实践
    本文详细介绍了如何在IDEA中将开发分支(dev)的代码安全、高效地合并到主分支(master),包括提交更改、推送远程仓库、切换分支、拉取最新代码以及最终的合并与推送操作。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 优雅实现 jQuery 折叠展开下拉菜单
    本文介绍了一种使用 jQuery 实现的优雅折叠和展开效果的下拉菜单,通过简单的 HTML 结构和 CSS 样式,结合 jQuery 脚本,可以轻松创建出美观且功能强大的下拉菜单。 ... [详细]
  • 深入解析SSL Strip攻击机制
    本文详细介绍了SSL Strip(一种网络攻击形式)的工作原理及其对网络安全的影响。通过分析SSL与HTTPS的基本概念,探讨了SSL Strip如何利用某些网站的安全配置不足,实现中间人攻击,以及如何防范此类攻击。 ... [详细]
author-avatar
pingyuki
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有