在Qt小部件获得焦点时获取通知/事件/信号

26 qt focus

在Qt中,当一个小部件获得焦点时,如何获得有关它的通知,以便我可以执行一些自定义代码?是否有信号或事件?

小智 35

你可以添加en event filter.
这是使用QtCreator编写的应用程序的示例.此表单有一个名为comboboxQComboBox.


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;
}
Run Code Online (Sandbox Code Playgroud)

  • +1正是我要找的,谢谢! (2认同)

mxc*_*xcl 10

Qt Designer不适用于此级别的WYSIWYG编程.

用C++做:

class LineEdit : public QLineEdit
{
    virtual void focusInEvent( QFocusEvent* )
    {}
};
Run Code Online (Sandbox Code Playgroud)


Mar*_*ett 9

在焦点改变时发送了一个"focusChanged"信号,在Qt 4.1中引入.
它有两个参数,即小部件失去焦点,一个获得焦点:

void QApplication::focusChanged(QWidget * old, QWidget * now)
Run Code Online (Sandbox Code Playgroud)

  • 作为参考,这里是 Qt 文档中的函数:http://doc.qt.io/qt-5/qapplication.html#focusChanged (2认同)

小智 5

最简单的方法是将插槽连接到QApplication :: focusChanged信号.