Получите уведомление/событие/сигнал, когда спокойный виджет получит фокус

26
задан sashoalm 20 October 2015 в 13:18
поделиться

7 ответов

Qt Designer не предназначен для этого уровня программирования WYSIWYG.

Сделайте это в C ++:

class LineEdit : public QLineEdit
{
    virtual void focusInEvent( QFocusEvent* )
    {}
};
10
ответ дан mxcl 28 November 2019 в 06:36
поделиться

Существует сигнал "focusChanged", отправленный, когда фокус изменяется, представленный в Qt 4.1.
Это имеет два аргумента, он проигрышный фокус виджета и один фокус получения:

void QApplication::focusChanged(QWidget * old, QWidget * now)
9
ответ дан harrymc 28 November 2019 в 06:36
поделиться

Самый простой путь состоит в том, чтобы подключить слот к QApplication:: сигнал focusChanged.

5
ответ дан 28 November 2019 в 06:36
поделиться

Я должен был бы играть с ним, но просто рассмотрение спокойной Документации, существует "focusInEvent". Это - обработчик событий.

Вот то, как Вы находите информацию о.... Откройте "спокойный Помощник". Перейдите к Индексу. Вставьте "QLineEdit". Существует действительно полезная ссылка, названная "Список всех участников, включая наследованных участников" на всех страницах Widget. Этот список является большим, потому что он даже имеет наследованный материал.

я сделал быстрый поиск "Фокуса" и нашел весь материал связанным с фокусом для этого Виджета.

2
ответ дан Bob 28 November 2019 в 06:36
поделиться

Вы столкнулись со странными разбиениями в QT, если вы посмотрите на документацию focusInEvent, это не слот, это защищенная функция, вы можете переопределить ее, если реализуете подкласс вашего виджета. Если вы просто хотите отловить событие, поступающее в ваш виджет, вы можете использовать QObject::installEventFilter , чтобы вы могли отлавливать любые события.

По какой-то странной причине разработчики Trolltech решили распространять события пользовательского интерфейса через два пути, сигналы / слоты и QEvent

2
ответ дан Harald Scheirich 28 November 2019 в 06:36
поделиться

QWidget :: setFocus () - это слот, а не сигнал. Вы можете проверить, находится ли QLineEdit в фокусе, с помощью свойства focus . QLineEdit испускает сигналы, когда текст изменяется или редактируется, см. Документацию.

0
ответ дан 28 November 2019 в 06:36
поделиться

Можно добавить en фильтр событий.
. Это пример приложения, написанного с QtCreator. Эта форма имеет QComboBox с именем combobox.


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->comboBox->installEventFilter(this);
    .
    .
    .
}

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (event->type() == QEvent::FocusOut)
    {
        if (object == ui->comboBox)
        {
            qWarning(object->objectName().toLatin1().data());
        }
    }
    return false;
}
35
ответ дан 28 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

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