Qt命令模式QHash / QMap

时间:2017-11-17 06:54:41

标签: java c++ qt qmap qhash

我最近使用以下方法在Java中实现了一个命令设计模式:

private HashMap<Component, CommandInterface> commands;

其中Component是任何Java组件(JButtonJMenuItem,...),而CommandInterface是我的命令类的接口。

所以我的问题是:如何用C ++ / Qt实现这个目标?

我已经使用了QMapQHash,但他们都需要为operator<重载运算符(operator==Key) - 值。

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

提前致谢。

1 个答案:

答案 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