Qt 之按钮鼠标 悬浮、按下、松开后的效果

这篇具有很好参考价值的文章主要介绍了Qt 之按钮鼠标 悬浮、按下、松开后的效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

  • 本文介绍了Qt中的按钮实现响应鼠标悬浮、按下、松开后的效果,在三种状态下,按钮改变不同的背景图片。

  • 方式1:通过修改样式表的方式去实现;

  • 方式2:通过继承QPushButton去实现一个自定义的按钮;

  • 方式3:在主界面中给按钮安装事件过滤器的方式去实现

方式1:通过修改样式表的方式去实现

  • 这里尽量不要有中文注释,我这里注释后就达不到想要的效果
  • 这个是修改myBtn父类的样式表
// 默认显示的图片
QPushButton#myBtn
{
    border-image:url(:/fly1.png);
}
// 进入显示的图片
QPushButton#myBtn:hover
{
    border-image:url(:/fly2.png);
}
// 按下显示图片
QPushButton#myBtn:pressed
{
    border-image:url(:/fly3.png);
}

方式2:通过继承QPushButton去实现一个自定义的按钮;

继承QPushButton类后,重写了event()方法

bool MyPushButton::event(QEvent *event)
{
    switch (event->type())
    {
    case QEvent::Enter:
        this->setIcon(QIcon(":/icons/images/c.png"));
        break;
    case QEvent::Leave:
        this->setIcon(QIcon(":/icons/images/c1.png"));
        break;
    case QEvent::MouseButtonPress:
        this->setIcon(QIcon(":/icons/images/暂停.png"));
        break;
    case QEvent::MouseButtonRelease:
        this->setIcon(QIcon(":/icons/images/c1.png"));
        break;
    default:
        break;
    }
    return QPushButton::event(event);
}

方式3:在主界面中给按钮安装事件过滤器的方式去实现

  • 注意这里先要给控件注册事件处理器
  • 重写事件过滤器
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     // 给控件注册事件过滤器
    ui->myBtn->installEventFilter(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    switch (event->type()) {
    case QEvent::HoverEnter:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly1.png")); // 按钮进入
        break;
    case QEvent::HoverLeave:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly2.png")); // 按钮离开,恢复默认
        break;
    case QEvent::MouseButtonPress:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly3.png")); // 按钮按下
        break;
    case QEvent::MouseButtonRelease:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly4.png")); // 按钮松开
        break;
    default:
        break;
    }
    return QWidget::eventFilter(obj, event);
}

Qt 之按钮鼠标 悬浮、按下、松开后的效果文章来源地址https://www.toymoban.com/news/detail-498721.html

总结

  • 三种方式都能实现一个按钮在悬浮、按下、松开后显示不同的背景图片的效果。
  • 其中第一种方式实现起来最为简单,如果仅仅是按钮外观的切换,采用该方法最为合理,符合MVC设计理念;
  • 第二种方法和第三种方式更具有灵活性,但难度也相对较大,这两种方法常用来实现一些更特殊的按钮操作。

到了这里,关于Qt 之按钮鼠标 悬浮、按下、松开后的效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D Button 鼠标悬浮进入与鼠标悬浮退出按钮事件

    由于甲方验收未通过,项目需要改版,在修改界面时,想实现鼠标在一级菜单悬浮即可显示二级菜单的功能,主要如下图 注意,上图鼠标只是悬浮在场景漫游按钮上,并未点击左键或右键等 思路是让类继承IPointerEnterHandler IPointerExitHandler两个接口,然后实现其中的方法 代码如

    2024年02月16日
    浏览(34)
  • 【QT】QT 按钮保持按下时的样式

    按钮设计样式 效果展示 但是这样设置按钮的样式只是在鼠标操作下会显示,当鼠标移出后,样式就消失了,这样这几个按钮又都回到白色情况下,无法让用户知道刚刚点击的是显示哪个窗口。 如何将按钮按下后保持press样式下的样式 1、将所有按钮的如下的两个状态均选中

    2024年02月11日
    浏览(34)
  • unity | EventTrigger(实现鼠标/按钮按下、抬起等时执行的方法)

    一、类比常用按钮 按钮组件一般只有当点击时,执行的方法。 点击:需要按下再起来 二、按钮的其他用法 但有时候,我们可能只需要按下的时候执行,或者抬起的时候执行,这时需要在加入EventTrigger组件  一、EventTrigger组件 当点击时Add New Event Type时,可以选择这个按钮响

    2024年02月09日
    浏览(29)
  • HTML-鼠标悬浮文案效果

    有时候,我们浏览网站时,鼠标停留在某处后鼠标会提示一些文案。 HTML 中可以使用 CSS 来实现鼠标悬浮文案效果。 首先,在 HTML 文件中添加需要显示悬浮文案的元素,例如一个 div 元素: 然后,在 CSS 文件中定义悬浮文案的样式。可以使用 ::after 伪元素来实现悬浮文案的效

    2024年01月17日
    浏览(30)
  • CSS鼠标悬浮图片模糊切换效果

    当我们想设置在鼠标移入前,图片是半透明(模糊)的,在我们鼠标移入后,图片就变得清晰,这里我们可以设置css的伪类:hover来实现: 首先我们在body中写一个div模块,这个div包裹了两个部分,一个部分就是我们要用的img,第二部分就是文字,文字部分也用一个div包裹。

    2024年02月10日
    浏览(44)
  • Qt 鼠标按下移动释放事件

    QEvent::MouseButtonPress ​ 鼠标按下时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseMove ​ 鼠标移动时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseButtonRelease ​ 鼠标释放时,触发该事件,它对应的子类是 QMouseEvent 自定义一个标签控件 LabelX ,让它继承自 QLabel ,然后

    2024年01月22日
    浏览(93)
  • React 入门:实战案例 TodoList Item鼠标悬浮效果

    本文实现鼠标悬浮到 Todo 记录上时的样式,以及悬浮到 Item 组件 UI 上时,显示【删除】按钮,鼠标离开时隐藏【删除】按钮。 本文通过给事件处理来实现。 (如果你对 React 的事件处理不了解,请阅读本专栏前面的【事件处理】章节) onMouseEnter:当鼠标悬浮到某个元素上时

    2024年02月12日
    浏览(23)
  • Qt鼠标悬停+悬浮窗口

    这两个功能,有很多办法可以实现,这里记一下笔者常用的。 mouseHover.h mouseHover.cpp QRImage.h QRImage.cpp MainWindow.h MainWindow.cpp

    2024年02月06日
    浏览(38)
  • Qt编写的小软件:一个模拟按键按下和鼠标(左键)按下的小工具

    最近玩SLG游戏的时候有大量对剧情推进无意义的对话想要跳过的时候只能狂按空格键或者狂点鼠标,还好本人好歹是程序员,于是写了个小工具来处理。 下载地址:Qt编写的模拟鼠标按下和按键按下的小工具-C++文档类资源-CSDN下载 上面的资源包含打包好的程序和代码。 界面

    2024年02月11日
    浏览(34)
  • Qt获取鼠标移动事件,窗口内任意位置按下鼠标左键拖动窗口

    重写窗口的两个事件函数mousePressEvent和mouseMoveEvent即可: 在mousePressEvent 中,按下鼠标左键时,记录窗口坐标,其中窗口坐标的计算是由鼠标事件获取到鼠标在整个屏幕中的坐标(ev-globalpos()),然后再使用pos()获取到鼠标在窗口内的相对位置,两者之差就是窗口在整个屏幕上

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包