使用 Qt 样式表更改状态更改时的图标

2023-12-07

我正在尝试支持我的应用程序的主题,但遇到了一个问题,我必须根据 QPushButton 的状态(默认、悬停、按下等)更改图标。这是我用来设置 QPushButton 图标的方法:

QPushButton#playButton {
    qproperty-icon: url(":/light/icons/play_light.png");
}

因为悬停状态使用的背景需要我的深色主题中的图标,所以我尝试使用以下方法将其更改为另一个:

QPushButton#playButton:hover {
    qproperty-icon: url(":/dark/icons/play_dark.png");
}

当我这样做时,play_light.png按应有的方式显示,但没有更改为play_dark.png关于状态变化。

在我的 Python 代码中,播放按钮在播放时更改为停止按钮,因此按照我的风格,我使用自定义属性将其设置为该图标:

QPushButton#playButton[isPlaying="true"] {
    qproperty-icon: url(":/light/icons/stop_light.png");
}

这对我来说也不会改变。于是,我在网上找到了一些代码来重置按钮的样式,如下所示:

self.ui.playButton.setProperty('isPlaying', not isEnable)
self.ui.playButton.setStyle(qApp.style())

我不想使用此解决方法every单按钮用于every单一状态变化。你们以前遇到过这个问题吗?

感谢您花时间查看此内容。


根据经验,可以在样式表中使用 Q_PROPERTY 设置的所有变量似乎都是执着的状态和只能设置一次.

例如,如果您添加自定义边框半径并设置此类样式表,您将看到圆角边缘,然后设置一个空样式表,您会发现小部件变回原来的样子。但对于“qproperty-xxx”,一旦设置,如果没有显式更新,它就不会改变。此外,“qproperty-xxx”只能在默认选择器中设置。

继承QToolButton为MyToolButton,主要代码如下:

Q_PROPERTY(QIcon iconUp READ iconUp WRITE setIconUp NOTIFY iconChanged)
Q_PROPERTY(QIcon iconOver READ iconOver WRITE setIconOver NOTIFY iconChanged)
Q_PROPERTY(QIcon iconDown READ iconDown WRITE setIconDown NOTIFY iconChanged)
Q_PROPERTY(QIcon iconUpChecked READ iconUpChecked WRITE setIconUpChecked NOTIFY iconChanged)
Q_PROPERTY(QIcon iconOverChecked READ iconOverChecked WRITE setIconOverChecked NOTIFY iconChanged)
Q_PROPERTY(QIcon iconDownChecked READ iconDownChecked WRITE setIconDownChecked NOTIFY iconChanged)

protected:
    QIcon m_iconUp;
    QIcon m_iconOver;
    QIcon m_iconDown;
    QIcon m_iconUpChecked;
    QIcon m_iconOverChecked;
    QIcon m_iconDownChecked;

signals:
    void iconChanged();

bool event(QEvent *event) override {
    switch (event->type()) {
    case QEvent::MouseButtonPress:
    case QEvent::MouseButtonRelease:
    case QEvent::MouseButtonDblClick:
    case QEvent::Enter:
    case QEvent::Leave:
        reloadIcon();
        break;
    default:
        break;
    }
    return QToolButton::event(event);
}

void checkStateSet() override {
    reloadIcon();
}

void reloadIcon() {
    if (isChecked()) {
        if (isDown() && !m_iconDownChecked.isNull()) {
            setIcon(m_iconDownChecked);
            return;
        } else if (underMouse() && !m_iconOverChecked.isNull()) {
            setIcon(m_iconOverChecked);
            return;
        } else if (!m_iconUpChecked.isNull()) {
            setIcon(m_iconUpChecked);
            return;
        }
    }
    if (isDown() && !m_iconDown.isNull()) {
        setIcon(m_iconDown);
        return;
    } else if (underMouse() && !m_iconOver.isNull()) {
        setIcon(m_iconOver);
        return;
    } else if (!m_iconUp.isNull()) {
        setIcon(m_iconUp);
        return;
    } else {
        setIcon(QIcon());
    }
}

样式表示例:

MyToolButton {
    qproperty-iconUp: url(:/images/up.svg);
    qproperty-iconOver: url(:/images/hover.svg);
    qproperty-iconDown: url(:/images/pressed.svg);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Qt 样式表更改状态更改时的图标 的相关文章

  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 从 vba 到平面文件的 Unicode 字符串

    我想将 excel vba 宏中的 unicode 字符串存储在 Windows 盒子上的平面文件中 该宏将普通字符串转换为 unicode 表示形式 需要将其存储在文件中并稍后检索 如前所述 您可以使用 Microsoft 脚本运行时 s
  • 根据屏幕尺寸更改列数

    我正在尝试 Bootstrap 我想知道如何根据屏幕尺寸调整列数 我从 Bootstrap CSS 教程中看到了这个 div class row div class col xs 12 col md 8 col xs 12 col md 8
  • ASP.NET Web 项目中的 Razor 视图

    我目前正在研究视图引擎 Razor Views 对我来说变得非常有趣 我正在开发一个 ASP NET 4 0 Web 表单应用程序 我能找到的 Razor 视图示例主要是 MVC 应用程序 是否可以将 Razor 视图集成到 Web 表单应
  • Java - “字符串索引超出范围”异常

    我编写这个小函数只是为了练习 但是抛出了一个异常 字符串索引超出范围 29 我不知道为什么 我知道这不是编写此函数的最佳方法 我可以使用正则表达式吗 这是代码 public String retString String x int j 0
  • 使用函数引用在 Kotlin 中重写 Java 代码发生 SAM 类型冲突

    我有一个使用方法引用的示例 Java 代码 我想将其重写为 Kotlin Java版本使用方法参考 解决方案简短明了 但另一方面 我无法在 Kotlin 中使用方法引用 我设法编写的唯一版本是下面的版本 这好像是Function3 s St
  • 从列表列表中删除所有出现的特定值 python

    据我所知 这个问题 令人惊讶 以前没有被问过 除非我由于缺乏经验而未能发现同等的问题 类似的问题还有 被问及一维列表 我有一个 list A 其中包含 int 值 我想从 list of lists 中删除 List A 中指定的所有值的所
  • 让 Google 地图标记在单击时显示特定的 div

    我对 javascript 还很陌生 我正在边学习边学习 如果这很简单 我很抱歉 我所拥有的是地图上显示的一堆标记 这些标记是从数组加载并使用函数显示的 我想要做的是弹出一个与单击的标记相关的特定 div 单击另一个标记时 前一个 div
  • 在 Seam 2.3 中配置 Infinispan CacheProvider

    我正在尝试迁移我的 Seam 2 3 应用程序以使用 Infinispan 在 JBoss AS7 中进行缓存 我查看了Seam 2 3 发行版中的博客示例 并将jGroupsConfig xml 和infinispan xml 文件复制到
  • Android 应用程序中的图像查看器

    我正在尝试启动一个使用内置 Android 图像查看器写入我的应用程序目录的图像 该图像已写入应用程序目录的不同部分 当得到如下文件时 super getFilesDir current png File exists 返回 true 我如
  • @Html.DropDownListFor;如何在DDL中为每个项目设置不同的背景颜色?

    我有一个下拉列表 html DropDownListFor 其中显示颜色名称 我想显示具有单独背景颜色的每个项目 就像 项目 绿色 应该在绿色背景中 而 黄色 应该在绿色背景中在黄色背景中 我怎样才能实现这个目标 不要忘记 您始终可以在视图
  • Google抓取503服务不可用

    当我在服务器上使用 wget curl 或 python 抓取 google 搜索引擎时 遇到了一个非常奇怪的问题 Google 将我重定向到以以下内容开头的地址 ipv4 ipv6 google fr sorry IndexRedirec
  • 如何通过Eclipse获取类文件?

    我在Eclipse中编写了一个应用程序 该应用程序已成功编译并运行 之后 在相应的目录中我找到了 java和 class文件 然后我删除了 class 文件 现在我不知道如何恢复它 Eclipse 写信给我 未编写类文件 项目可能不一致 如
  • 是否可以在没有 git clone 的情况下获取远程 git 存储库的提交日志/消息

    是否可以在不使用 git clone 的情况下获取远程 git 存储库的提交日志 消息 我正在使用的 git 存储库很大 即使我使用 depth 1 运行 git clone 仍然需要一些时间才能克隆它 我正在寻找这样的东西 git 远程日
  • html5 音频。如何获取比特率

    我正在为 google chrome 编写一个扩展 我有一个情况 我有一个 mp3 文件的链接 我可以播放它 我可以提取它的持续时间 但我如何计算比特率呢 通过某些属性可以吗 或者通过使用文件大小进行一些计算 如果是第二个 如何获取文件大小
  • 获取 iPhone 上当前 Wi-Fi 接入点的 IP 地址?

    我正在尝试从我的iPhone到我计算机上同一网络上运行的套接字服务器 我怎样才能得到当地的IP地址运行套接字服务器的计算机的名称 include
  • java尝试在通知中进行变异

    我有两个 swing ui 表单和一个它们都查看的模块 每个 ui 都添加一个监听器来监听属性的变化 并在发生更改时更新其自己的文本字段 基本上 他们都应该更新模块并从中更新 有没有一种简单的方法可以在没有绑定框架的情况下做到这一点 这是我
  • HTML 中的 PHP 无法使用 Flask 运行

    我最近刚刚开始使用 Flask 以前没有 html php 经验 所以如果这是天真的 请原谅我 我试图在 html 文件中使用一些 php 来改进我构建的 web 应用程序 但甚至无法让最简单的测试用例发挥作用 例如 取一个测试用例这个网站
  • 1980 年以来计算领域的重大新发明

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 这个问题源于comments关于过去 50 年左右计算领域的不同进展 其他一些参与者要求我向整个论坛提出这个问题 这里的基本思想不
  • SQL 错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

    进入的数据
  • 使用 Qt 样式表更改状态更改时的图标

    我正在尝试支持我的应用程序的主题 但遇到了一个问题 我必须根据 QPushButton 的状态 默认 悬停 按下等 更改图标 这是我用来设置 QPushButton 图标的方法 QPushButton playButton qpropert