2015-07-10 97 views
1

我有一個QML應用程序,其中我已經subclassed QApplication用QML創建我的主屏幕。我遇到的問題是單擊關閉按鈕應用程序按預期關閉,但我想處理的情況下,如果某些服務正在運行,我想重寫關閉按鈕行爲。防止QApplication應用程序從關閉,如果服務正在運行

我試圖重寫closeEvent()沒有任何運氣。任何人都可以通過一些方式指出我可以處理這個問題嗎

UPDATE:這是代碼片段我試圖

class SingleApplication : public QApplication { 
    Q_OBJECT 
public: 
    SingleApplication(int &argc, char **argv); 

    void closeEvent (QCloseEvent * event) 
    { 
     event->ignore(); 

    } 
} 

Main.cpp的

#include "view.h" 
#include <QDebug> 
#include <QDesktopWidget> 
#include "SingleApplication.h" 

int main(int argc, char *argv[]) 
{ 
    SingleApplication app(argc, argv); 
    if(!app.isRunning()) { 

     app.processEvents(); 

     View view(QUrl("qrc:/qml/main.qml")); 
#ifdef Q_OS_LINUX 
     view.setFlags(Qt::WindowMinimizeButtonHint|Qt::WindowCloseButtonHint); 
#endif 
     view.setMaximumSize(QSize(1280,700)); 
     view.setMinimumSize(QSize(1280,700)); 

     // Centering the App to the middle of the screen 
     int width = view.frameGeometry().width(); 
     int height = view.frameGeometry().height(); 
     QDesktopWidget wid; 
     int screenWidth = wid.screen()->width(); 
     int screenHeight = wid.screen()->height(); 
     view.setGeometry((screenWidth/2)-(width/2),(screenHeight/2)-(height/2),width,height); 


     view.show(); 

     return app.exec(); 
    } 
    return 0; 

} 
+1

一些相應的代碼可以幫助你得到正確的答案。你已經試過了什麼?什麼是錯誤? – folibis

+0

嘗試使用['QApplication :: setQuitOnLastWindowClosed()'](http://doc.qt.io/qt-4.8/qapplication.html#quitOnLastWindowClosed-prop) –

+0

您沒有粘貼具有名爲' closingDown()'。請發佈[簡短,獨立,正確(可編譯),示例](http://sscce.org/)。 – Mitch

回答

1

沒有的QApplication ::的closeEvent。這種虛擬功能屬於QWidget。

使用QApplication表明您的QML UI有正常的QWidget容器(正如您所說的UI基於QML)。你還是將覆蓋部件的closeEvent例如爲:

class MyMainWidget : public QWidget // or is it QMainWindow? 
{ 
    // snip 
private: 
    void closeEvent(QCloseEvent*); 
} 

void MyMainWidget::closeEvent(QCloseEvent* event) 
{ 
    // decide whether or not the event accepted 
    if (condition()) 
     event->accept(); 
} 

如果你的容器控件尚未覆蓋(簡單的QWidget?),好了,現在你必須這樣做。

而你沒有說你是否想讓應用程序窗口繼續運行。我假設你也想這樣。

+0

HI @AlexanderVX,所以你的意思是說我需要將QApplication改爲QWidget?對不起,如果這是一個愚蠢的問題,我不知道這件事! – prakashpun

+0

你能提供main.cpp代碼嗎?這可能會顯示。我的意思是你很可能在那裏使用QWidget或它的孩子。 – AlexanderVX

+0

Hi @AlexanderVX。我附上了我的main.cpp代碼。注意SingleApplication是QApplication的子類。 – prakashpun

相關問題