我最近使用以下方法在Java中实现了一个命令设计模式:
private HashMap<Component, CommandInterface> commands;
其中Component
是任何Java组件(JButton
,JMenuItem
,...),而CommandInterface
是我的命令类的接口。
所以我的问题是:如何用C ++ / Qt实现这个目标?
我已经使用了QMap
和QHash
,但他们都需要为operator<
重载运算符(operator==
或Key
) - 值。
唯一可能的方法是从QObject
派生并重载operator<
吗?
提前致谢。
答案 0 :(得分:0)
Java和C ++之间的一个非常重要的区别是C ++区分了对象指针(Java中的引用)QObject* o;
和对象值QObject o;
话虽这么说,Qt强烈建议在堆上创建QObject(使用new)。所以你最终得到了QObject指针QObject*
。然后你的hashmap会起作用,因为比较指针就像比较整数。
QHash<QObject*, CommandInterface*> commands;
不要忘记来管理对象的生命周期,但是你没有Java中的垃圾收集器。您可以根据需要使用Qt树所有权:http://doc.qt.io/qt-5/objecttrees.html