如何让 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 位
- 清理项目:菜单Build->Clean All
- 关闭 QtCreator
- 转到 build-project/debug 文件夹并删除 .exe、.pdb 和 .ilk 文件
转到您的 build-project/cache 文件夹并删除与您的项目同名且后缀为 .pdb 的文件夹(yourproject.pdb 文件夹)- 不确定是否有必要,但我做到了所以我也把它写在这里
重新启动 QtCreator、qmake、构建和 run/debug(还有 tadaaa!)
A "simple" clean all 没有成功,甚至没有重新启动计算机。我不得不手动删除 QtCreator 未删除的文件。
我希望它可以帮助将来的人,节省几个小时。
我需要什么才能在 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 位
- 清理项目:菜单Build->Clean All
- 关闭 QtCreator
- 转到 build-project/debug 文件夹并删除 .exe、.pdb 和 .ilk 文件
转到您的 build-project/cache 文件夹并删除与您的项目同名且后缀为 .pdb 的文件夹(yourproject.pdb 文件夹)- 不确定是否有必要,但我做到了所以我也把它写在这里
重新启动 QtCreator、qmake、构建和 run/debug(还有 tadaaa!)
A "simple" clean all 没有成功,甚至没有重新启动计算机。我不得不手动删除 QtCreator 未删除的文件。
我希望它可以帮助将来的人,节省几个小时。