Сигнал aboutToQuit не вызывается в среде Android? - PullRequest
0 голосов
/ 28 марта 2019

Как я могу поймать QApplication :: aboutToQuit в среде Android? Он отлично работает в Windows, но никогда не вызывается, когда пользователь закрывает приложение на Android.

Я использую Qt 5.12.2, QQuick2.

Он не работает на эмуляторе Android и на моем телефоне Android.

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);    
    QuitEventHandle test;
    QObject::connect(&app, &QCoreApplication::aboutToQuit, &test, &QuitEventHandle::aboutToQuit);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;        

    return app.exec();
}

class QuitEventHandle : public QObject
{
    Q_OBJECT

public:
    QuitEventHandle(QObject *parent=nullptr);
    virtual ~QuitEventHandle() override;

public slots:
    void aboutToQuit();
};

QuitEventHandle::QuitEventHandle(QObject *parent) : QObject(parent)
{
}
QuitEventHandle::~QuitEventHandle()
{
}

void QuitEventHandle::aboutToQuit()
{
    int a = 2;
}

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Мое решение:

  • Используйте QGuiApplication :: applicationStateChanged для сохранения состояний приложения.
  • В случае Windows очистите ресурс с помощью: QApplication :: aboutToQuit
  • В случае Android, пусть система очистит ресурс.
1 голос
/ 28 марта 2019

Просто мысль.Жизненный цикл приложения на Android сильно отличается от того, что вы видите на ПК.Когда пользователь «закрывает» приложение, оно не обязательно закрывается.Вместо этого он проходит несколько этапов: onPause, onStop и onDestroyed.

Таким образом, возможно, что сигнал не излучается, потому что даже если приложение закрыто, QApplication все еще работает.

Если вы хотите получить больше информации о жизненном цикле активности Android: https://developer.android.com/guide/components/activities/activity-lifecycle

Вы можете отслеживать состояние приложения, используя QGuiApplication::applicationStateChanged(Qt::ApplicationState state)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...