Qt表单上有更改事件吗?

问题描述:

在Delphi中是否有Qt类似 Form.onChange

Is there in Qt something like Form.onChange in Delphi?

我发现一些 changeEvent 方法,但是当我写连接
connect这个,SIGNAL(this-> changeEvent),这个,SLOT(checkIfSomethingChanged()));

I found some changeEvent method but when I wrote connect connect(this, SIGNAL(this->changeEvent),this, SLOT(checkIfSomethingChanged()));

,并试图检查它

void importdb_module::checkIfSomethingChanged(){

    QMessageBox::information(0, "", "Test");
}

我意识到不起作用。

我想检查一些条件,每当我的形式发生变化时,如何做?

I want to check some condition everytime when something changed in my form, how to do that?

changeEvent插槽是在QWidget中找到的一个虚拟的受保护的函数。因此,如果您继承QWidget或任何QWidget派生类,则可以覆盖该函数。例如: -

The changeEvent slot is a virtual, protected function found in QWidget. Therefore, if you inherit from QWidget or any QWidget derived class, you'll be able to override that function. For example: -

class MyForm : public QWidget
{
    protected slots:
        virtual void changeEvent(QEvent * event);
}


void MyForm::changeEvent(QEvent* event)
{
    // Do something with the event    
}

如果您想在事件之外知道表单已更改,您可以向形式并从changeEvent发送以传递事件: -

If you wanted to know outside of the event that the form has been changed, you can add a signal to the form and emit it from the changeEvent to pass the event on: -

class MyForm : public QWidget
{
   signals:
        void FormChanged(QEvent* event);

    protected slots:
        virtual void changeEvent(QEvent * event);
}


void MyForm::changeEvent(QEvent* event)
{
    emit FormChanged(event);
}

现在使用Qt 5连接语法将另一个类连接到新信号:

Now connect another class to the new signal, using Qt 5 connect syntax: -

connect(myFormObject, &MyForm::FormChanged, someclassObject, &SomeClass::HandleFormChanged);