如何让showEvent()被调用?

时间:2017-01-06 12:04:54

标签: c++ qt qwidget

如果要在showEvent()派生类中调用QWidget,我需要什么?

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);

然后当我按下主窗口上的按钮

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

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

2 个答案:

答案 0 :(得分:1)

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

在还原窗口时调用showEvent()以获取更多信息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();


}

答案 1 :(得分:1)

我回答了我自己的问题,因为它最终不是一个编程问题。 编译/调试的东西一定出错了。

为了记录,如果你的代码中的所有内容都是正确的,那么这里有什么可做的,但对于某些人而言呢?没有调用函数的原因(也许它只能在Qt的事件处理程序重新实现时发生?)。

使用QtCreator 3.0.0和Qt 5.2.0 MSVC2010 - 32位

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

  5. 重启QtCreator,qmake,构建和运行/调试(和tadaaa!)

  6. A&#34;简单&#34;干净所有没有做到这一点,甚至没有计算机重启。我不得不手动删除QtCreator没有删除的文件。

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