如何让showEvent()被调用?
我需要什么才能在QWidget
派生类中调用showEvent()
?如何让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(2010 MSVC,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没有被调用。
我回答我自己的问题最终不是一个编程问题。 编译/调试的东西肯定出错了。对于记录来说,如果在代码中一切都正确,但是对于一些怪异的原因,函数没有被调用(也许它只能在Qt的事件处理程序重新实现时发生),那么这里是做什么的。菜单建设 - >清除所有
- 清洁项目 -
此使用QtCreator 3.0.0使用Qt 5.2.0 MSVC2010发生-project/debug文件夹并删除.exe,.pdb和.ilk文件
转到您的build-project/cache文件夹并删除与项目后缀相同的名称的文件夹.pdb(yourproject.pdb文件夹) - 不知道我这是必要的,但我做到了,所以我在这里写下它
重新启动QtCreator,qmake,构建和运行/调试(和tadaaa!)
一个“简单”的干净所有没有做的伎俩,甚至没有电脑重新启动。我必须手动删除未被QtCreator删除的文件。
我希望它可以帮助未来的人,节省几个小时。
设置在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();
}
你是怎么调用这个小部件的'show'的? –
为了让'showEvent'打电话,你只需要做你*说过的*你已经完成的事情。这是一个[最小示例](http://pastebin.com/3FCjuS990)。如果您正在通过放置一个断点进行测试,也许您没有将调试器附加到您的应用程序中。如果您使用的是Qt Creator,则需要使用“开始调试”按钮“F5”(而不是“运行”按钮“ctrl + R”)。 – Mike
@Jonathan Mee:直接调用拥有这个小部件的另一个小部件的show()插槽 – RDK