如何在qt中获得当前关注的QLineEdit?

时间:2017-10-12 06:03:54

标签: c++ qt focus qlineedit

如何识别哪个QLineEdit当前焦点在qt?

设置我尝试QLinEdit的焦点:

   ui->linedit->setfocus();

但它也不适合我。我该如何解决这两个问题?

2 个答案:

答案 0 :(得分:2)

要识别哪个有焦点的Widget(QlineEdit或任何QWidget),您需要获取所有当前的widget子节点,将每个子节点转换为QLineEdit,并检查哪个具有焦点,示例代码:

QList<QWidget*> mylineEdits = this->findChildren<QWidget*>();
QListIterator<QWidget*> it(mylineEdits); // iterate through the list of widgets
QWidget *lineEditField;
while (it.hasNext()) {
    lineEditField = it.next(); // take each widget in the list
    if(QLineEdit *lineE = qobject_cast<QLineEdit*>(lineEditField)) {  // check if iterated widget is of type QLineEdit
        //
        if (lineE->hasFocus())
          {
            // this has the focus ...   
          }

    }
}

第二个问题,重点放在QWidget上,已在此Post中回答:

答案 1 :(得分:0)

将焦点设置为具有setFocus()功能的小部件。

ui->lineEdit_3->setFocus();

您可以使用hasFocus()功能检查对小部件的关注。

QWidget * widgetName = qApp->focusWidget();
qDebug () << widgetName->objectName();

输出"lineEdit_3"

当焦点窗口小部件发生变化时,QApplication::focusChanged(QWidget *old, QWidget *now)信号被发出。您可以根据焦点变化将其连接到您可以根据需要执行任何操作的插槽。