7

QtForm.onChange中有类似 Delphi 的东西吗?

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

并试图这样检查

void importdb_module::checkIfSomethingChanged(){

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

我意识到它不起作用。

每当我的表格发生变化时,我都想检查一些情况,该怎么做?

4

2 回答 2

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);
于 2013-11-06T10:31:59.690 回答
2

这行不通,因为您混淆了两个概念:事件和信号/槽。为了让它工作,你需要重写你的类的changeEvent()虚函数。像这样的东西:

void MyWidget::changeEvent(QEvent *event)
{
    QMessageBox::information(0, "", "Test");
}
于 2013-11-06T10:26:49.517 回答