是否在Qt表格中有变化事件?

时间:2013-11-06 10:23:18

标签: c++ qt delphi events

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

我找到了一些changeEvent方法但是当我写连接时 connect(this, SIGNAL(this->changeEvent),this, SLOT(checkIfSomethingChanged()));

并试图像那样检查

void importdb_module::checkIfSomethingChanged(){

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

我意识到它不起作用。

我想在每次表格中发生变化时检查一些情况,怎么做?

2 个答案:

答案 0 :(得分:5)

changeEvent插槽是QWidget中的虚拟受保护功能。因此,如果从QWidget或任何QWidget派生类继承,您将能够覆盖该函数。例如: -

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


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

如果您想在事件之外知道表单已更改,您可以向表单添加一个信号并从changeEvent中发出它以传递事件: -

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连接语法将另一个类连接到新信号: -

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

答案 1 :(得分:2)

这不起作用,因为你混淆了两个概念:事件和信号/插槽。要使其工作,您需要覆盖类“changeEvent()虚函数。像这样:

void MyWidget::changeEvent(QEvent *event)
{
    QMessageBox::information(0, "", "Test");
}