Устойчивая обработка сочетания клавиш с помощью JavaScript

Вы должны быть в состоянии использовать dynamic_cast, но Qt также предоставляет свой собственный приведение qgraphicsitem_cast , которое возвращает элемент, приведенный к данному типу, если элемент относится к этому типу или иным образом 0.

Примечание из документа:

Чтобы эта функция работала правильно с пользовательскими элементами, переопределите функцию type () для каждого пользовательского подкласса QGraphicsItem.

blockquote>

Пример класса:

class MyQGraphicsPixmapItem : public QGraphicsPixmapItem
{
public:
    ...
    enum { Type = UserType + 1 };
    int type() const override { return Type; }
    ...
};

Пример теста:

MyQGraphicsPixmapItem myItem;
qDebug() << &myItem;
QGraphicsItem *item = &myItem;
MyQGraphicsPixmapItem *castedItem = qgraphicsitem_cast(item);
if (castedItem) {
    qDebug() << castedItem;
} else {
    qWarning() << "casting failed";
}

Обновление:

QGraphicsScene: : itemAt возвращает самый верхний видимый элемент в указанной позиции или 0, если в этой позиции нет элементов.

Если вы подтвердили с помощью qgraphicsitem_cast, что вы успешно произвели приведение, то есть он вернул указатель, а не 0, то вы действительно получили свой пользовательский элемент, а не какой-либо другой графический элемент. Тогда в нем должно быть определено имя, а не пустая строка, если вы определили имя для всех ваших пользовательских элементов.

Для дальнейшей отладки этой проблемы вы можете использовать QGraphicsScene :: items , чтобы вывести список всех элементов на сцене, которые считаются видимыми QGraphicsScene::itemAt. Выполните приведение в цикле и распечатайте имя всех ваших пользовательских предметов.

Одна вещь, которая приходит мне в голову, это то, что это связано с координатами, которые вы используете при вызове itemAt. Вы, например, выполняете приведение, когда вы щелкаете мышью, а затем запрашиваете сцену с координатами элемента , а не с координатами сцены . QGraphicsSceneMouseEvent :: scenePos возвращает положение курсора мыши в координатах сцены. Может быть, вы не получаете заказной предмет, как вы думаете?

5
задан Rob W 28 December 2011 в 11:45
поделиться

3 ответа

Библиотека HotKey, доступная в LivePipe, управляет работами пакета с Прототипом и является совместимым IE.

http://livepipe.net/extra/hotkey

5
ответ дан 18 December 2019 в 07:57
поделиться

JimmyP отправил это как комментарий, но он имеет право быть ответом для голосования целей.

http://www.openjs.com/scripts/events/keyboard_shortcuts/

4
ответ дан 18 December 2019 в 07:57
поделиться

То, что я сделал бы, присоединить onKeyUp события к document.body. Затем в этом обработчике событий я использовал бы метод Element.fire для увольнения пользовательского события. Хотя этот шаг является дополнительным, он поможет в отделении обработчика событий от действия быть выполненным, и можно использовать тот же пользовательский обработчик событий от, говорит событие нажатия кнопки.

$(document.body).observe("keyup", function() {
    if(/* key + modifier match */) {
        $(document.body).fire("myapp:mycoolevent");
    }
});

$(document.body).observe("myapp:mycoolevent", function() {
    // Handle event.
});

Позже, для привязки того же события с нажатием кнопки:

$(button).observe("click", function() {
    $(document.body).fire("myapp:mycoolevent");
});

До обработки модифицирующих клавиш затронут, проверьте этот ресурс (очень старый, но все еще выглядит применимым) для большего количества справки.

3
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: