0

我正在设计/编写一个小型 UI 工具包(出于自我完善的目的,还有什么?),我不确定哪种 API 在以下方面会更好:

  1. 最低WTF?等级。
  2. 最灵活。
  3. 最简洁,但具有描述性
  4. 最适合标准 C++。

一些重要的元素:

  • 该类window很好地代表了一个窗口,可以显示、隐藏、最小化、最大化、全屏最大化和关闭。
  • 我有一个proxy_property可以分配任意获取和设置函数的类,例如可以反映应该通过某些外部 API 调用获取或设置的当前值。
  • 我还有一个property可以连接(即观察到)的类,当它被分配一个新的/不同的值时,会向它的观察者发出这个新值的信号。

我不确定处理窗口状态的最佳方法是什么:

  1. 私有成员变量,只能通过hide()isVisible()成员函数访问,Qt 风格。
  2. hide()由,show()等 getter支持并相应更新的只读属性(将需要一些额外的实现,因为我目前还没有解决这个问题) 。
  3. proxy_property可以分配新状态的A ,在分配新值时会导致调用hide()show()等或它们的组合。

乍一看,出于 3 的原因,我更喜欢 3 号,但考虑到其他条件,我不确定这种设计的效果如何。可以说我没有看到我的 3 号在任何地方使用过,而且我害怕过于依赖我的proxy_property概念,因为它可能会产生比其价值更多的开销(另一方面,这是我们正在谈论的 UI 代码,所以仍然会有开销)。

为了清楚起见:

enum class window_state { windowed, hidden, minimized, maximized, fullscreen_maximized };
class window
{
public:
  proxy_property<window_state> state;
  //....
};

所以可以做

some_window.state = window_state::minimized;

实际做一些更传统的事情,例如

some_window.minimize();

当然,最终结果在功能上是相同的。只是 API 完全不同。

4

1 回答 1

0

我认为您应该小心区分您可以设置的属性(例如,visibility与您可以观察的属性(例如isVisible)),因为在许多情况下,可观察的属性不仅仅取决于设置。

一个控件,例如,isVisible如果它有visibility == trueAND 它是 container isVisible

没有理由让控件的visibility设置可观察,事实上它可能会导致错误。

出于这个原因,我更喜欢 的 setter 和 getter visibility,以及 的可听属性isVisible

于 2017-07-27T16:12:50.160 回答