如果要在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。
答案 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位
转到build-project / cache文件夹并删除与项目后缀为.pdb(yourproject.pdb文件夹)同名的文件夹 - 不确定是否有必要,但我这样做了所以我在这里写下来
重启QtCreator,qmake,构建和运行/调试(和tadaaa!)
A&#34;简单&#34;干净所有没有做到这一点,甚至没有计算机重启。我不得不手动删除QtCreator没有删除的文件。
我希望将来可以帮助某人,节省几个小时。