适用于Android和iOS的Qt QML在系统范围内更改颜色

适用于Android和iOS的Qt QML在系统范围内更改颜色,qt,colors,controls,qml,Qt,Colors,Controls,Qml,我试图写一个小应用程序,有黑暗的背景。 为了让生活更轻松,我使用了Qt快速控制 例如,工具按钮。 未按下“工具”按钮时,其字体为黑色,因此在我的深色背景上不可见 阅读其他帖子,似乎很难相信您无法为ToolButton或许多其他Qt快速控件设置文本颜色或其他颜色。 建议的解决方案是完全复制/粘贴这些元素和/或样式的重新编码。 这听起来很模糊的Qt/Digia和它很难相信,因为你要定制的第一件事是颜色前-后-文本-活动-非活动等等 那么,有没有其他方法可以在应用程序范围内改变这些颜色呢? 在Qt小部

我试图写一个小应用程序,有黑暗的背景。 为了让生活更轻松,我使用了Qt快速控制

例如,工具按钮。 未按下“工具”按钮时,其字体为黑色,因此在我的深色背景上不可见

阅读其他帖子,似乎很难相信您无法为ToolButton或许多其他Qt快速控件设置文本颜色或其他颜色。 建议的解决方案是完全复制/粘贴这些元素和/或样式的重新编码。 这听起来很模糊的Qt/Digia和它很难相信,因为你要定制的第一件事是颜色前-后-文本-活动-非活动等等

那么,有没有其他方法可以在应用程序范围内改变这些颜色呢? 在Qt小部件中,我将修改QApplication::QPallette,并且只需几行即可完成

请帮帮我


零你真的试过了吗?你在哪里读到这是不可能的?我对调色板做的不多,但搜索调色板Qt5.2得到的第二个结果是,它从Qt4.7开始就存在了。属性是只读的,所以必须是在C++中设置调色板的意图。 即使不使用SystemPalette,也不需要完全复制/粘贴控件/样式:


如果您想对多个控件重复使用一个样式,只需从中创建一个组件,作为属性或在其自己的QML文件中创建即可。

我可以理解,当不清楚如何执行某项操作时,这是令人沮丧的,但是,给编写这段代码的开发人员打电话真的能帮助你的问题得到很好的回答吗?我确实把Qt/Digia这种方式称为dim,相信我,如果他们按照看起来的方式做的话,dim是一个敏感的词。如果您需要为任务添加任何有用的内容,请参阅下面的我的评论。别误会我的意思:我们开发人员可以生成可怜的代码,但主要是公司的政策迫使我们这么做,时间压力,改变规格,等等。因此,我要强调的是:我不想侮辱Digia开发人员,但可能是控制被强制进入发布的方式。证明我错了,给我一个解决问题的好方法,那就太好了-你好,举个例子:你真的试过吗?。很遗憾,你的建议不起作用,是的,我试过了。如果这样做,则会覆盖整个样式,并最终显示一个带有红色文本的“无功能”按钮。这就是为什么我说一个复杂的解决方法是复制/粘贴原始样式并添加颜色指令。但这并不好,如果需要的话,这段代码就是一段cr*p。嗯,移动路演sortof的Digia开发者暗示整个Qt控制都是用热针完成的,我想这就是结果之一。也许有一个聪明的解决办法。有人吗?对不起,忘了你的调色板评论。如果你看一下我的第一个问题,我有点了解系统调色板。我试过了,但在QML中失败了,而不是Qt小部件!您能提供一些与QML一起使用的行吗?我所做的是获取QApplication::palette,修改ButtonText的活动颜色组并将其写回。这对QML按钮文本没有影响。如果你知道的更好,请告诉我。哇,所有这些都是使用Qt5.3测试版的,但我认为在以前的版本中没有更好的…只是澄清一下:当你创建一个ButtonStyle对象时,你不会覆盖任何内容。当您覆盖特定样式组件时,您开始丢失内容。如果您添加一个可编译的示例,说明您使用Qpalete尝试了什么,这样我们就可以确切地看到您尝试了什么,以及为什么它不起作用。您好!我刚刚再次尝试了你的代码,这次是在桌面上。我在iOS应用程序中使用QML,在那里我看到了覆盖所有行为。。。在桌面上,它几乎可以工作文本对齐有点不对劲,不管是谁。。。。你曾经在iOS或Android上尝试过吗?也许这只是手机上的故障。。。
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1

Rectangle {
    width: 400
    height: 400
    color: "#444"

    ToolButton {
        text: "Button"
        style: ButtonStyle {
            label: Text {
                color: "red"
                text: control.text
            }
        }
    }
}