Странно, двойной щелчок / перетаскивание мышью вызовет ключевое событие "CTRL-C" - PullRequest
1 голос
/ 29 февраля 2012

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

Ответы [ 2 ]

1 голос
/ 05 декабря 2016

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

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

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

0 голосов
/ 28 марта 2012

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

!event->isAutoRepeat();
...