gpt4 book ai didi

c++ - 如何让 showEvent() 被调用?

转载 作者:行者123 更新时间:2023-11-30 03:35:06 27 4
gpt4 key购买 nike

我需要什么才能在 QWidget 派生类中调用 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);

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

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

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

最佳答案

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

作为记录,如果您的代码中的一切都是正确的,但由于某些奇怪的原因没有调用函数(也许它只能在 Qt 的事件处理程序重新实现时发生?),您应该怎么做?

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

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

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

一个“简单”的清理没有达到目的,甚至没有重新启动计算机。我不得不手动删除 QtCreator 未删除的文件。

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

关于c++ - 如何让 showEvent() 被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com