Странно, двойной щелчок/перетаскивание мышью вызывает ключевое событие CTRL-C

Qt ведет себя странно: при двойном щелчке мыши или перетаскивании виджета он вызывает событие клавиши Ctrl-C. Вот мой код:

class CWidget: public QWidget
{
    Q_OBJECT

public:
    CWidget()
    {

    };
    virtual ~CWidget()
    {
    }

protected:
    void keyPressEvent ( QKeyEvent * event ) 
    {
        if (event->key() == Qt::Key_C && (event->modifiers() & Qt::ControlModifier))
        {
            qDebug() << "strange copy: Ctrl-C";
        }
        QWidget::keyPressEvent(event);
    }
}; // 

После того, как виджет будет показан, вы можете дважды щелкнуть мышью и перетащить его, и будет напечатано отладочное сообщение «странная копия: Ctrl-C». Два дня копался в интернете по этому поводу, ничего не нашел.

Я использовал это неправильно или это ошибка Qt?

Код протестирован под (vs2008 + Qt Addin + Qt 4.7.3) и (qcreator + Qt 4.7.3), xp sp2


person koder chen    schedule 29.02.2012    source источник


Ответы (2)


Я столкнулся с той же проблемой и, наконец, понял, почему. Это вызвано использованием программного обеспечения для перевода, такого как «有道词典».

Когда вы дважды щелкаете или перетаскиваете, он, вероятно, подберет некоторый текст в текстовой области, и программное обеспечение для перевода каким-то образом захватывает это действие и автоматически запускает действие копирования, намереваясь получить выбранный текст для его автоматического перевода. Это вызвало такое странное поведение.

Это вряд ли произойдет на англоязычных пользователях и вряд ли воспроизведет проблему, если программа-переводчик не была открыта.

person Ruan yi    schedule 05.12.2016
comment
это решает мою проблему. Я удалил этот дерьмовый словарь. - person Robert; 29.05.2019

Вы должны проверить:

!event->isAutoRepeat();
person Sergey    schedule 27.03.2012