When QFileSystemWacther is created on OS Windows it installs a native event filter (QWindowsRemovableDriveListener) in QCoreApplication::eventDispatcher(), see QWindowsFileSystemWatcherEngine::QWindowsFileSystemWatcherEngine(). When QFileSystemWacther is destroyed it removes the filter from QAbstractEventDispatcher::instance(), see QAbstractNativeEventFilter::~QAbstractNativeEventFilter(). For GUI thread that's the same, for a background thread it's different. So if you create QFileSystemWacther in a background thread and delete it there, there will be a dangling pointer in QCoreApplication::eventDispatcher() which will almost certainly lead to a crash when handling native events.
It looks like a regression somewhere between Qt 5.5 and Qt 5.9.2, since I checked with Qt 5.4 it didn't crash (actually it used to work even for Qt 4). I attached a project for your convenience, just select "test" -> crash it!" from the application menu. But it's reproducible with the following line of code:
EDIT: Added a backtrace in case someone googles by stack:
|For Gerrit Dashboard: QTBUG-64171|
|210052,3||QFilesystemWatcher/Windows: Use event dispatcher of thread||5.9||qt/qtbase||Status: MERGED||+2||0|