使用 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 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • Virtualenv 在 OS X Yosemite 上失败并出现 OSError

    我最近更新到 OSX Yosemite 现在无法使用virtualenv pip 每当我执行 virtualenv env 它抛出一个 OSError Command Users administrator ux env bin pytho
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • 使用 Boto3 以字符串形式打开 S3 对象

    我知道使用 Boto 2 可以使用以下命令将 S3 对象作为字符串打开 get contents as string http boto readthedocs org en latest ref file html highlight c
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • Plotly:如何检查基本图形结构(版本 4)

    对于旧版本的plotly 例如在 Jupyterlab 中 您可以简单地运行figure像这样检查你的图形的基础知识 Ouput data marker color red size 10 symbol 104 mode markers l
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • Python 中维基百科 API 中的 DisambiguationError 和 GuessedAtParserWarning

    我想获得维基百科与搜索词相关的可能且可接受的名称列表 在这种情况下是 电晕 当输入以下内容时 print wikipedia summary Corona 这给出了以下输出 home virej local lib python3 8 si
  • 使用 Python 将连续日期分组在一起

    Given dates datetime 2014 10 11 datetime 2014 10 1 datetime 2014 10 2 datetime 2014 10 3 datetime 2014 10 5 datetime 201
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 如何使用 python 定位和读取 Data Matrix 代码

    我正在尝试读取微管底部的数据矩阵条形码 我试过libdmtx http libdmtx sourceforge net 它有 python 绑定 当矩阵的点是方形时工作得相当好 但当矩阵的点是圆形时工作得更糟 如下所示 另一个复杂问题是在某
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐

  • 从 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