如何让 showEvent() 被调用?

How to make showEvent() get called?

我需要什么才能在 QWidget 派生的 class 中调用 showEvent()

ConfigMenuForm.h

//simplified the code of the class declaration
class ConfigMenuForm : public QWidget
{
    Q_OBJECT

public:
    explicit ConfigMenuForm(QWidget *parent = 0);
    ~ConfigMenuForm();

signals:

public slots:

private slots:

protected:
    void showEvent(QShowEvent *event) override; //with or without the override keyword, no change
private:
}

ConfigMenuForm.cpp

//amongst others
void ConfigMenuForm::showEvent(QShowEvent * event)
{
    //do some stuff here - really simple
}

当我 show() 我的小部件时无法触发它... 我的意思是代码没有效果,当放置一个断点时,它不会停在上面,所以我假设事件没有被触发。

我做错了什么?

编辑 - 添加更多代码和精度:

我正在使用 QtCreator 3.0.0 和 Qt 5.2.0(MSVC 2010,32 位)

//creating the widget in the main window's constructor (class Viewer)
// ConfigMenuForm calls hide() in its own constructor
 m_configMenuForm = new ConfigMenuForm(this);

然后当我按下主按钮时 window

void Viewer::ontBConfigClicked()
{
    m_configMenuForm->show();
}

让我感到困惑的是 m_configMenuForm 实际上显示在主 window 之上,它变得可见并且正常工作!只是没有调用showEvent。

要在 visual studio 中设置断点,请参考:breakpoint

showEvent() 在您恢复 window 时调用以获取更多信息 showEvent

代码片段:-

#include <QtGui>
#include <iostream>

//Move this class to any header file then exceute
class widget : public QWidget
{
    Q_OBJECT
protected :
    void showEvent( QShowEvent * event )
    {
        QWidget::showEvent(event);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    widget w;
    w.show(); //Here showEvent() get called
    return app.exec();


}

我正在回答我自己的问题,因为最终这不是编程问题。 compilation/debug 东西肯定出了问题。

郑重声明,如果您的代码中的一切都正确,但由于某些怪异的原因未调用函数(也许它只能在 Qt 的事件处理程序重新实现时发生?),请执行以下操作?

这发生在使用 QtCreator 3.0.0 和 Qt 5.2.0 MSVC2010 - 32 位

  1. 清理项目:菜单Build->Clean All
  2. 关闭 QtCreator
  3. 转到 build-project/debug 文件夹并删除 .exe、.pdb 和 .ilk 文件
  4. 转到您的 build-project/cache 文件夹并删除与您的项目同名且后缀为 .pdb 的文件夹(yourproject.pdb 文件夹)- 不确定是否有必要,但我做到了所以我也把它写在这里

  5. 重新启动 QtCreator、qmake、构建和 run/debug(还有 tadaaa!)

A "simple" clean all 没有成功,甚至没有重新启动计算机。我不得不手动删除 QtCreator 未删除的文件。

我希望它可以帮助将来的人,节省几个小时。