2015-07-10 14 views
1

У меня есть приложение QML, в котором я подклассифицировал 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() '. Пожалуйста, напишите [Short, Self Contained, Correct (Compilable), Example] (http://sscce.org/). – Mitch

ответ

1

Там нет QApplication :: CloseEvent. Такая виртуальная функция принадлежит QWidget.

Использование QApplication показало, что у вас есть обычный QWidget-контейнер для вашего QML-интерфейса (как вы говорите, пользовательский интерфейс основан на 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. NOte, что SingleApplication - это класс, который подклассифицирует QApplication. – prakashpun