Как отключить QAbstractButton animateClick, когда lineEdit имеет фокус

Я новичок в программировании QT GUI, и я использую QT Creator. Проблема, с которой я сталкиваюсь, связана с моей кнопкой и редактированием строки, когда пользователь нажимает клавишу ввода. Моя программа открывает групповое окно и позволяет пользователю ввести пароль и нажать ОК или отменить.

Если пользователь нажимает клавишу ввода, когда редактирование строки имеет фокус, программа, похоже, издает второй сигнал для QAbstractButton animateClick(); Поэтому, когда открывается следующее групповое окно и пользователю предлагается нажать «ОК» или «Отмена», программа продолжает работу, как если бы пользователь нажал кнопку «ОК».

Я установил свои нажимные кнопки, чтобы позволить пользователю нажимать клавишу табуляции и нажимать клавишу ввода. Чтобы получить эту функциональность, я установил okbutton->setAutodefault(true); и cancelButton->setAutodefault(true);

У меня также есть строка Edit для пользователя, чтобы ввести пароль и нажмите Enter. Я настроил это, подключив сигнал возврата нажатием к кнопке ОК, показанной ниже.

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

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

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

Если пользователь щелкает мышью на кнопке okButton или я установил okButton->setAutoDefault(false); программа работает как надо. Я хотел бы знать, возможно ли отключить сигнал animateClick, который появляется, когда редактирование строки имеет фокус.

Любая помощь с этим будет принята с благодарностью.

0

Решение

Попробуйте никогда не подключаться lineEdit с okButtonзакомментируйте эту строку в вашем коде:

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

и проверьте, работает ли программа так, как вы хотите.


Кроме того, вы можете позвонить

okButton->setDefault(true);

в дополнение к вашему setAutoDefault() звонки на обе кнопки, в зависимости от того, что именно вы хотите сделать, когда пользователь нажимает Войти с различными вещами в фокусе. Увидеть этот ответ для получения дополнительной информации по этому вопросу.


Я предполагаю, так как вы никогда не упоминаете это, что вы не звоните setDefault() для любой из ваших кнопок. Таким образом, okButton ваша первая кнопка с autoDefault свойство установлено в true, Это означает, что okButton становится «кнопкой выбора» диалога, когда диалог должен обрабатывать Войти нажатие клавиши, которое не произошло на некоторых других autoDefault кнопка (например, cancelButton в твоем случае).

Каждый раз, когда любой виджет в вашем диалоге получает Войти нажатие клавиши и не использует само событие, в конечном итоге оно обрабатывается логикой обработки кнопок диалога по умолчанию, что приводит к нажатию на вышеупомянутую «кнопку выбора».

QLineEdit не используется для многострочного редактирования, поэтому, вероятно, просто не использует событие нажатия клавиши для Войти (хотя все еще обрабатывает это, в том, что это передает returnPressed() сигнал). Таким образом, ваша связь returnPressed() в конечном итоге делает все, что он делает, и, дополнительно, логика кнопки по умолчанию заканчивает тем, что нажимал вашу кнопку во второй раз.

Также проверьте эта тема на форумах проекта Qt которая, кажется, решает одну и ту же проблему по-разному.

0

Другие решения


По вопросам рекламы [email protected]