2017-01-06 41 views
1

我需要什么才能在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没有被调用。

+0

你是怎么调用这个小部件的'show'的? –

+0

为了让'showEvent'打电话,你只需要做你*说过的*你已经完成的事情。这是一个[最小示例](http://pastebin.com/3FCjuS990)。如果您正在通过放置一个断点进行测试,也许您没有将调试器附加到您的应用程序中。如果您使用的是Qt Creator,则需要使用“开始调试”按钮“F5”(而不是“运行”按钮“ctrl + R”)。 – Mike

+0

@Jonathan Mee:直接调用拥有这个小部件的另一个小部件的show()插槽 – RDK

回答

1

我回答我自己的问题最终不是一个编程问题。 编译/调试的东西肯定出错了。对于记录来说,如果在代码中一切都正确,但是对于一些怪异的原因,函数没有被调用(也许它只能在Qt的事件处理程序重新实现时发生),那么这里是做什么的。菜单建设 - >清除所有

  • 关闭QtCreator
  • 转到您的构建:32位

    1. 清洁项目 -

      此使用QtCreator 3.0.0使用Qt 5.2.0 MSVC2010发生-project/debug文件夹并删除.exe,.pdb和.ilk文件

    2. 转到您的build-project/cache文件夹并删除与项目后缀相同的名称的文件夹.pdb(yourproject.pdb文件夹) - 不知道我这是必要的,但我做到了,所以我在这里写下它

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

    一个“简单”的干净所有没有做的伎俩,甚至没有电脑重新启动。我必须手动删除未被QtCreator删除的文件。

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

  • 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(); 
    
    
    } 
    
    相关问题