Проигнорируйте события от нажатия мыши и события клавиатуры в QT

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

setAttribute(Qt::WA_TransparentForMouseEvents);

setFocusPolicy(Qt::NoFocus);
10
задан Michael Petrotta 11 March 2011 в 01:38
поделиться

3 ответа

Вы можете использовать:

QWidget::setEnabled(false)

отключить события мыши и клавиатуры для виджета.

5
ответ дан 3 December 2019 в 15:35
поделиться

Вы этого хотите?

    <TextBox Name="txtName"></TextBox>
    <TextBox Grid.Row="1" Name="txtAddress"></TextBox>
    <Button Grid.Row="2" Content="Finish">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <EventSetter Event="Click" Handler="MoveFocusOnClick" />
            </Style>
        </Button.Style>
        <!--<Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
            </EventTrigger>
        </Button.Triggers>-->
    </Button>

c #:

    public void MoveFocusOnClick(object sender, RoutedEventArgs e)
    {
        Keyboard.Focus(txtName); // Or your own logic
    }
-121--1515303-

Похоже, что это ошибка. Правильный номер строки по-прежнему указан в разделе Проект | Информация . Смотрите ответ Ника на аналогичный вопрос .

-121--3418678-

Вы можете использовать фильтры событий на вашей мыши и клавиатуре для фильтрации некоторых нажатий клавиш или mouseclick, когда вам это необходимо:

yourWidget->installEventFilter(this);

...

bool YourFrm::eventFilter(QObject* pObject, QEvent* pEvent)
{
    if (pEvent->type() == QEvent::KeyPress) 
    {
        QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(pEvent);
        int PressedKey = pKeyEvent->key();

        if(PressedKey == Qt::Key_Return)
        {
            // Filter Return key....
            return true;
        }

        // standard event processing
        return QObject::eventFilter(pObject, pEvent);
    }
    else if (pEvent->type() == QEvent::MouseButtonPress) 
    {
        QMouseEvent* pMouseEvent = static_cast<QMouseEvent*>(pEvent);

        ... // etc...
    }
    else 
    {
        // standard event processing
        return QObject::eventFilter(pObject, pEvent);
    }
}

Подробнее об этом: http://qt.nokia.com/doc/4.6/eventsandfilters.html

Надеюсь, это поможет!

8
ответ дан 3 December 2019 в 15:35
поделиться

Вы имеете в виду для QGraphicsItem ?

Если да, то вы можете позвонить

void QGraphicsItem::setEnabled ( bool enabled )

И чтобы активировать событие позже, так как элемент больше не получает событий, вы должны пройти мимо Сцены, потому что вы не можете получить непосредственно событие на элементе.
Если ваша проблема заключается не в использовании GraphicsView Frameworks, а в другой части qt, то это почти тот же самый процесс :
. Вы можете вызвать :

QWidget::setEnabled(false) //like Massimo said

Для того, чтобы отреагировать на виджет, просто определите событие нажатия внутри объекта в вашем приложении, чтобы иметь возможность вызвать `setEnable(true) на вашем виджете !

Надеюсь, это поможет ! `

4
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

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