Qt:“ closeEvent”的脱机定义与“ MainWindow”中的任何声明都不匹配

时间:2019-04-25 12:25:43

标签: c++ qt

我只想忽略用户在Qt,C ++中抛出的关闭事件

我尝试了the docs of Qt中已经存在的内容

void MainWindow::closeEvent(QCloseEvent *event)
{
    event->ignore();
}

但这会引发错误out-of-line definition of "closeEvent" does not match any declaration in "MainWindow"。我希望忽略结束事件。

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
-
#endif // MAINWINDOW_H

1 个答案:

答案 0 :(得分:2)

解决方案是您需要在头文件中声明将覆盖closeEvent。在文档中,您可以看到它是受虚拟保护的,这意味着您可以覆盖它。

您的代码应为以下代码:

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void closeEvent(QCloseEvent *event) override;

private:
    Ui::MainWindow *ui;
};
-
#endif // MAINWINDOW_H

cpp文件:

void MainWindow::closeEvent(QCloseEvent *event)
{
    event->ignore();
}