0

我最近使用 Java 实现了一个命令设计模式:

private HashMap<Component, CommandInterface> commands;

Component任何 Java 组件 ( JButton, JMenuItem, ...)在哪里,并且CommandInterface是我的命令类的接口。

所以我的问题是:我怎样才能用 C++/Qt 做到这一点?

我已经使用过QMapand QHash,但是它们都需要一个重载的运算符(operator<operator==)作为它们的值Key

是唯一可能的派生QObject和重载方法operator<吗?

提前致谢。

4

1 回答 1

0

Java 和 C++ 之间的一个非常重要的区别是 C++ 区分对象指针(Java 中QObject* o;的引用)和对象值QObject o;

话虽如此,Qt 强烈鼓励在堆上创建 QObject(使用 new)。所以你最终得到了 QObject 指针QObject*。然后您的哈希图将起作用,因为比较指针就像比较整数一样。

QHash<QObject*, CommandInterface*> commands;

不要忘记管理对象的生命周期,你没有像 Java 那样的垃圾收集器。您可以根据需要使用 Qt 树所有权为方便起见:http: //doc.qt.io/qt-5/objecttrees.html

于 2017-11-17T09:10:06.567 回答