为了了解GTK 3,我一直在构建一些小型的“原理证明”程序,而现在GTK 4的可用性有限,我也一直在尝试了解这个版本。在尝试迁移到GTK 4时,我使用CSS提供程序为GTK 3编写了一个显示两个具有不同属性的进度条的程序,并在GTK 4下重新构建了它。当我运行GTK 4版本的程序时,程序中的CSS覆盖被忽略,除非我将CSS提供程序上下文引入其中一个进度条的显示级别,但这会导致两个进度条显示相同的行为,而不是每个进度条都有唯一的行为,我为一个标签小部件添加了CSS提供者和上下文,这个覆盖起作用了,但有些则不然。这就好像在显示级别忽略了某些CSS提供程序覆盖。查看有关优先级的文档(例如,GTK_STYLE_PROVIDER_PRIORITY_APPLICATION)并测试各种优先级常量并没有产生任何影响。
显示代码的内容在这个叙述中会太长,所以我已经将GTK 3和GTK 4版本的代码上传到我的Github存储库沿着还上传了一个“pdf”文件,直观地说明了GTK 3和GTK 4之间的不同行为。如果您想自己查看和测试代码,请访问以下链接:
https://github.com/cschuls/GTK4_Mystery
我认为可以在显示级别使用“id#”属性添加特定于widget的CSS定制,但这似乎只是增加了不必要的复杂性,而这种做法在GTK 3中运行良好。
补充说明。
通过试验各种场景,我找到了一个解决方法,它提供了将不同的样式属性应用于每个进度条小部件的理想结果。对于这些小部件,我将它们各自的CSS提供程序数据添加到显示样式上下文,而不是尝试将CSS提供程序添加到每个小部件的上下文。如果您希望查看此解决方法,我在我的Github存储库中添加了一个包含源代码的“工作区”文件夹。
这为这个问题提供了一个很好的解决方案,但是它没有回答我的根本问题,即为什么在应用程序执行过程中没有对每个进度条小部件的CSS提供程序信息进行规定;然而,与小部件(如标签和按钮)关联的CSS提供程序信息的行为却与它们在GTK 3中的行为相同。如果有人能回答我的核心问题,我将非常高兴。
此致,
克雷格
1条答案
按热度按时间eeq64g8w1#
因为这个问题有点老,一些使用的函数是“不推荐的”。这就是为什么我的答案基于当前的状态。
我做的第一件事是添加一个名为“css_resource. css”的CSS文件
字符串
我在文件“resource.xml”中也提到了这个文件。
型
在progressbar.ui文件中,我给Button1起了一个名字。
型
文件“main.c”看起来像这样。
型
“compile.script”文件保持不变。
型
问候