2017-01-06 73 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(); 
    
    
    } 
    
    相關問題