【问题标题】:Qt Command Pattern QHash/QMapQt 命令模式 QHash/QMap
【发布时间】:2017-11-17 06:54:40
【问题描述】:

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

private HashMap<Component, CommandInterface> commands;

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

所以我的问题是:如何使用 C++/Qt 完成此任务?

我已经使用过QMapQHash,但是它们的Key 值都需要一个重载运算符(operator&lt;operator==)。

是从QObject 和重载operator&lt; 派生的唯一可能方法吗?

提前致谢。

【问题讨论】:

    标签: java c++ qt qmap qhash


    【解决方案1】:

    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

    【讨论】:

    • 不知道,因为需要提供qHash()函数,所以QHash可以用指针作为Key。谢谢,我会试试的!
    • @ChristianB 正如我所说的那样,指针只是一个整数值(内存地址),因此可以这样使用,Qt 为大多数常见的 C++ 类型和 Qt 数据和容器提供了qHash()类(QString、QVector 等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多