Шаблон команды Qt QHash/QMap

Недавно я реализовал шаблон проектирования команд в Java с использованием:

private HashMap<Component, CommandInterface> commands;

куда Component любой компонент Java (JButton, JMenuItem,...) а также CommandInterface интерфейс для моих командных классов

Итак, мой вопрос: как я могу сделать это с C++/Qt?

Я уже использовал QMap а также QHashно им обоим нужен перегруженный оператор (operator< или же operator==) для них Key-ценности.

Это единственный возможный способ получить из QObject и перегрузка operator<?

Заранее спасибо.

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

Другие вопросы по тегам