小编Ich*_*hyo的帖子

GTK:彻底摆脱系统主题/CSS

GTK3 应用程序可以使用 CSS 设置样式和主题。如何强制 GTK使用我的应用程序附带的 CSS,而不是将它与用户系统上安装的主题组合/级联?

为什么要这样做?从理论上讲,CSS 将是一个很棒的基于规则的样式系统,您只需添加一个屏幕完整的明智选择的规则来一致地定义应用程序的外观。不幸的是,在实践中,人们倾向于在他们的样式表中添加数百个脑残的、重复的定义,从而伪造级联的本质。

实际问题是,无论用户系统上安装的全局主题如何,我的应用程序都将获得媒体处理应用程序的典型、柔和的深灰色外观。通过阅读 GTK 文档和GTKmm 教程,我想出了以下代码来阅读我自己的 CSS 样式表:

auto screen = Gdk::Screen::get_default();
auto css_provider = Gtk::CssProvider::create();
try {
    css_provider->load_from_path(lib::resolveModulePath (stylesheetName, resourceSerachPath));

} catch(Glib::Error const& failure) {
    WARN(gui, "Failure while loading stylesheet '%s': %s", cStr(stylesheetName), cStr(failure.what()));
}

Gtk::StyleContext::add_provider_for_screen(screen, css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这很完美。但是——现在我被迫“反对”用户系统上存在的 CSS 规则。如果我开始在默认规则中设置合适的边框颜色,并在 GtkWindow 的规则中设置深灰色背景和合适的文本颜色,再加上一些文本输入字段的规则,我会在某些部分获得所需的外观,但是每当用户的系统主题为某些特定小部件或小部件组合添加了特定定义,从而明确重复颜色而不是从通用规则继承它们,我需要将另一个特定规则添加到我的应用程序样式表中以修复该特定情况。也就是说,已安装系统主题的可能错误引导的结构迫使我的应用程序样式表采用相同的错误引导的不良做法,并且有数百个单例定义一遍又一遍地重复相同的值。

问题

  • 我怎样才能告诉 GTK 在我的应用程序中使用我的样式表?
  • 有没有可行的替代方案,它不是那么激进,但仍然允许我以预期的方式使用 CSS(最小规则集 + 级联)?

css c++ gtk gtk3 gtkmm3

9
推荐指数
1
解决办法
1084
查看次数

ScalaTest:使用ShouldMatcher检查序列的内容

在我的单元测试中,我想表示计算(结果)序列产生预定义的结果值序列.但是没有假设任何关于序列容器的实际实现类型.

而且我想说明我的意图相当明确和不言自明.
如果我尝试使用ScalaTest的"ShouldMatchers"并编写

val Input22 = ...
calculation(Input22) should equal (Seq("x","u"))
Run Code Online (Sandbox Code Playgroud)

...然后我遇到了简单的相等问题,因为calculation(..)可能返回一个ArrayBuffer,Seq("x","u")而是一个List

unit-testing scala scalatest

6
推荐指数
1
解决办法
2130
查看次数

"条件表达式中的数字和非数字类型"背后的推理

由于C++ 11转换GCC在条件表达式中输出警告"枚举和非枚举类型".我想了解这个警告背后的原因.比较枚举常数有什么危险?

很明显,我们可以摆脱这种警告

  • -Wno-enum-compare
  • 通过显式转换为整数类型

但为什么麻烦?就个人而言,我总是努力编写警告免费代码,通常默认发出的警告是非常明智的.例如,它认为比较有符号和无符号整数是危险的.

但使用枚举广泛使用惯用的C++元编程.我不知道任何替代方案,它具有类似的可读性,简洁性和重点,并且不需要任何实际存储.

引用一个具体的例子:以下元函数可能出现什么问题,以便警告就足够了?

template<class TYPES>
struct MaxSize;
template<>
struct MaxSize<NullType>
  {
    enum{ value = 0 };
  };
template<class TY, class TYPES>
struct MaxSize<Node<TY,TYPES> >
  {
    enum{ thisval = sizeof(TY)
        , nextval = MaxSize<TYPES>::value
        , value   = nextval > thisval?  nextval:thisval
        };
  };
Run Code Online (Sandbox Code Playgroud)

c++ coding-style c++11

6
推荐指数
1
解决办法
3076
查看次数

Amazon EKS:通过 python 脚本生成/更新 kubeconfig

在使用 Amazon 的 K8s 产品(EKS服务)时,您有时需要将 Kubernetes API 和配置连接到 AWS 内建立的基础设施。特别是,我们需要一个kubeconfig用正确的凭据和URL连接到由EKS提供的K8S控制平面。

Amazon 命令行工具aws为此任务提供了一个例程

aws eks update-kubeconfig --kubeconfig /path/to/kubecfg.yaml --name <EKS-cluster-name>
Run Code Online (Sandbox Code Playgroud)

问题:通过 Python/boto3 做同样的事情

在查看Boto API 文档时,我似乎无法找到上述aws例程的等效项。也许我看错了地方。

  • boto中是否有现成的功能来实现这一点?
  • 否则你将如何直接在 python 中处理这个(除了aws在子进程中调用)?

aws-cli kubernetes boto3 amazon-eks

5
推荐指数
1
解决办法
3675
查看次数

元编程技巧来整理私有函数

这是关于C++中编译时内省的问题

是否有一个已知的技巧来检测匹配函数是否实际上是私有的,因此无法调用?我的直觉猜测是这是不可能的 - 但也许我错了?


说明:使用元编程技术(主要基于SFINAE机制),可以在作为模板参数给出的类型中检测属性(嵌套类型,成员,具有特定签名的函数)的存在(即我们知道这种类型存在,但是我们对这种类型一无所知.)基于这样的内省谓词,可以创建专门的实现,适配器等.

现在具体的转折是这样的谓词可能匹配类的私有成员.当我们随后根据该(false)匹配的结果生成代码时,编译失败,因为实际上我们不允许访问该成员.因此,解决这种错误匹配的技术会很好......

c++ metaprogramming c++11

4
推荐指数
1
解决办法
1055
查看次数