Qt 小部件失去焦点时的信号是什么?
在对话框中,当按下tab键时,焦点将切换到另一个小部件。在Qt中,当小部件失去焦点时是否有任何信号?我可以用它来检查输入是否有效吗?如果没有,我可以将焦点设置回原处并要求用户重新输入吗?没有信号,但如果您想知道小部件何时失去焦点,请在小部件中覆盖并重新实现Qt 小部件失去焦点时的信号是什么?,qt,qt4,qt5,qdialog,Qt,Qt4,Qt5,Qdialog,在对话框中,当按下tab键时,焦点将切换到另一个小部件。在Qt中,当小部件失去焦点时是否有任何信号?我可以用它来检查输入是否有效吗?如果没有,我可以将焦点设置回原处并要求用户重新输入吗?没有信号,但如果您想知道小部件何时失去焦点,请在小部件中覆盖并重新实现void QWidget::focusOutEvent(QFocusEvent*事件)。它将在小部件失去焦点时调用。要使小部件具有焦点,请使用QWidget::setFocus(Qt::FocusReason) 要验证QLineEdit或QCo
void QWidget::focusOutEvent(QFocusEvent*事件)
。它将在小部件失去焦点时调用。要使小部件具有焦点,请使用QWidget::setFocus(Qt::FocusReason)
要验证QLineEdit
或QComboBox
中的输入,您可以将QValidator
子类化并实现您自己的验证器,或使用现有子类之一,QIntValidator
、QDoubleValidator
或QRegExpValidator
。分别使用QLineEdit::setValidator(const-QValidator*)
和QComboBox::setValidator(const-QValidator*)
设置验证程序
如果要验证模式对话框的内容,一种方法是使用以下实现覆盖QDialog::exec()
:
int MyDialog::exec() {
while (true) {
if (QDialog::exec() == QDialog::Rejected) {
return QDialog::Rejected;
}
if (validate()) {
return QDialog::Accepted;
}
}
}
bool MyDialog::validate() {
if (lineEdit->text().isEmpty()) {
QMessageBox::critical(this, "Invalid value", "The specified value is not valid");
lineEdit->setFocus();
lineEdit->selectAll();
return false;
}
return true;
}
它将不允许用户使用“确定”按钮或任何具有接受角色的其他按钮关闭对话框,除非对话框的内容已成功验证。在本例中,我假设对话框有一个名为lineEdit
的QLineEdit
,并且validate
函数将确保其内容不是空的。如果是,它会将焦点设置到QLineEdit
并再次显示对话框。也可以(且更容易)自己创建信号
在.cpp中(不要忘记包含moc)
要连接它:
connect(new FocusWatcher(myWidget), &FocusWatcher::focusChanged, this, &View::doSomething);
事实上,这是一个信号-。的精辟评论应该是公认的答案。当然,它不是那样工作的。换个角度考虑投票。code>如果您对失去焦点的
QLineEdit
感兴趣,则QLineEdit::editingFinished()
信号会捕获该事件。
connect(new FocusWatcher(myWidget), &FocusWatcher::focusChanged, this, &View::doSomething);