Eliminazione QQUICKView On Exit Cause Domanda QT per il blocco
-
21-12-2019 - |
Domanda
Ho fondato un deadlock in Qt 5.3.Come correggere correttamente?Senza brutto fix (non per eliminare QQUICKView *)
Ho un singleton con un puntatore per QQuickView
.Quando ho bisogno di chiudere la mia applicazione, faccio una chiamata di QGuiApplication::quit()
e prova a rilasciare QQuickView *
in Destructor di SingleNot.Risultato: l'applicazione si blocca.
Esempio:
Test.QML
import QtQuick 2.1
Rectangle
{
id: root;
color: "black";
signal quit();
Component.onDestruction: quit();
}
.
main.cpp
#include <QGuiApplication>
#include <QQuickView>
#include <QQuickItem>
#include <QPointer>
struct Singleton
{
QPointer< QQuickView > w;
static Singleton inst;
int run( int argc, char *argv[] )
{
QGuiApplication a( argc, argv );
w = new QQuickView();
QObject::connect( w, &QQuickView::statusChanged, [=]()
{
QObject::connect( w->rootObject(), SIGNAL( quit() ), qApp, SLOT( quit() ) );
} );
w->setSource( QUrl( "qrc:/test.qml" ) );
w->setResizeMode( QQuickView::SizeRootObjectToView );
w->show();
a.exec();
return 0;
}
~Singleton()
{
delete w; // Comment this to fix bug
}
};
Singleton Singleton::inst;
int main(int argc, char *argv[] )
{
Singleton::inst.run( argc, argv );
return 0;
}
.
P.S.C ++ 0x viene utilizzato per semplificare il codice.Stesso risultato sui compilatori C ++ 03.
Soluzione
E 'stato un Bug in Qt.Fissato dalla versione 5.4.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow