gpt4 book ai didi

c++ - 设计问题 : apply specific treatment to a subclass only manipulating the superclass

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:29 25 4
gpt4 key购买 nike

我在一个项目中工作,我遇到了一个我不知道如何解决的设计问题。我想找到代码可扩展性的最佳解决方案。该项目包含一个带有选项卡的网络浏览器,但在选项卡中不仅有网页,我还可以有其他类型的小部件。我正在使用 Qt,因此选项卡中的小部件是 QWidgets(QWebview 和其他类型,我仍然需要自己编写代码)。无论如何,我会尽量让这个问题足够通用。

有一个类QWidget,它继承了两个类:QWebView 和MyWidget。我有一个容器 (QTabWidget) 可以包含它们,因为它可以包含 QWidgets。此外,我有一个按钮(例如上一页按钮),它只适用于一种 QWidget:QWebView。所以,当我按下这个按钮时,我向 QTabWidget 询问当前的 QWidget,如果它是 QWebView,我会做一些事情,否则我什么都不做。这就是问题所在:我需要能够区分两种不同的类型:如果我要求 QTabWidget 给我 currentWidget,它会给我一个 QWidget*,但我不知道它是 QWwbView 还是 MyWidget 和所以我必须做一个讨厌的 dynamic_cast<> 来检查真实类型。这意味着,如果我添加一个带有另一个操作的新 MyWidget2,我将不得不更新所有包含 dynamic_cast<> 的代码,而我不希望这样。

我一直在考虑命令模式和启动模式,但我认为它们不太适用。

您有什么建议吗?谢谢

最佳答案

在抽象层面上,听起来您需要某种方式将各种小部件类型映射到它们可以支持的操作(例如“转到上一页”)——这样,当您添加新的小部件类型时,您也指定它的 Action 。根据当前查看的选项卡,您可以启用/禁用相关操作,以便当用户能够执行操作时,您知道它适用于当前正在查看的选项卡类型。

实现此目的的一种方法是将虚拟成员函数添加到返回相关操作的基本小部件类型。然后,您将选项卡小部件返回的 QWidget 转换为您的基本小部件类型。这仍然涉及转换(因为 QTabWidget 没有准备好返回基本小部件类型的小部件),但是当您添加新类型的小部件时它消除了可维护性问题。

关于c++ - 设计问题 : apply specific treatment to a subclass only manipulating the superclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com