QT - высокоуровневый виджет с прозрачностью события клавиатуры и события от нажатия мыши?

просто используйте сущность 
 для разрыва строки в атрибуте title.

40
задан darron 10 July 2009 в 19:00
поделиться

4 ответа

Используйте фильтры событий Qt : они позволят вашему приложению использовать любые события, которые вы укажете (т.е. события клавиатуры и мыши), но при этом будут обрабатывать другие события, такие как события рисования.

bool FilterObject::eventFilter(QObject* object, QEvent* event)
{
    QKeyEvent* pKeyEvent = qobject_cast<QKeyEvent*>(event);
    QMouseEvent* pMouseEvent = qobject_cast<QMouseEvent*>(event);

    if (pKeyEvent || pMouseEvent)
    {
        // eat all keyboard and mouse events
        return true;
    }

    return FilterObjectParent::eventFilter(object, event);
}
1
ответ дан 27 November 2019 в 01:56
поделиться

Я думаю, что переопределение должно работать:

bool YourMainWindow::event( QEvent *event )
{
   event ->accept();
   return true;
}

это кое-что из того, что в документации класса QWidget говорится о функции-члене event ():

Эта функция возвращает истину, если событие было признано, иначе это возвращает false. Если распознанное событие был принят (см. QEvent ::pted), любая дальнейшая обработка, такая как событие распространение на родительский виджет stops.

1
ответ дан 27 November 2019 в 01:56
поделиться

Возможно, мне что-то здесь не хватает, но пробовали ли вы создать подкласс класса QMainWindow и переопределить QWidget :: event () , чтобы всегда возвращать ложь? Если вам нужно обрабатывать некоторые события, вы также можете добавить сюда этот интеллект.

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

1299] Если это не сработает, вы можете попытаться перенаправить события на рабочий стол, вызвав QCoreApplication :: notify () и передав событие в виджет рабочего стола, полученное путем вызова QApplication :: desktop () . Понятия не имею, сработает ли это, но казалось, что стоит попробовать.

2
ответ дан 27 November 2019 в 01:56
поделиться

Может, вам нужен

widget->setAttribute(Qt::WA_TransparentForMouseEvents)

? Это то, что использует QRubberBand, чтобы родитель мог обрабатывать события мыши. Что касается событий клавиатуры, QWidget не получает никаких событий клавиатуры, если он не установил для себя focusPolicy ().

setFocusPolicy( Qt::NoFocus );

поэтому должен позаботиться о событиях клавиатуры.

8
ответ дан 27 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

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