all this "external changes" is poorly designed (unnecessarily overcomplicated, and the wakeups are going to be terrible for battery life).

instead:
- use QFileSystemWatcher (via Q_GLOBAL_STATIC, they aren't cheap to create, so you only want one of them)
- set the path of the DirModel on it (and deal with removing it when the DirModel is destroyed, and changing it appropriately)
- listen for directoryChanged(QString) on the QFileSystemWatcher instance inside DirModel, pseudocode, untested:

    void DirModel::onPathModified(const QString &path) // private slot
    {
        if (path == path()) {
            // something changed inside this directory, trigger a re-read, use a timer here to avoid multiple changes to the directory forcing constant re-reads
            QTimer::singleShot(300 /* 300 is a fairly sane, but arbitrarily-chosen number */, this, SLOT(refresh()));
        }
    }

with that done, i'd also make this non-optional: there's no good reason to have it disabled