我在一个项目中工作,我遇到了一个我不知道如何解决的设计问题。我想找到代码可扩展性的最佳解决方案。该项目包含一个带有标签的网络浏览器,但在标签中不仅有网页,我还可以有其他类型的小部件。我正在使用 Qt,因此选项卡中的小部件是 QWidgets(QWebview 和我仍然需要自己编写代码的其他类型)。无论如何,我会尽量保持这个问题足够通用。
有一个类 QWidget,其中 2 个类继承自:QWebView 和 MyWidget。我有一个可以包含它们的容器(QTabWidget),因为它可以包含 QWidget。此外,我有一个按钮(例如上一页按钮),它只适用于一种 QWidget:QWebView。所以,当我按下这个按钮时,我向 QTabWidget 询问当前的 QWidget,如果它是 QWebView,我会做一些事情,否则我什么都不做。这就是问题所在:我需要能够区分两种不同的类型:如果我让 QTabWidget 给我 currentWidget,它会给我一个 QWidget*,但我不知道它是 QWwbView 还是 MyWidget 和所以我必须做讨厌的 dynamic_cast<> 来检查真实的类型。这意味着如果我用另一个动作添加一个新的 MyWidget2,
我一直在考虑命令模式和策略模式,但我认为它们不太适用。
你有什么建议吗?谢谢