diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp
index 6330d529fbd5b6006185ad71414a21edcaca1a76..fa6306005b85669fb7dbd9f43bc4a7da4254bfe2 100644
--- a/src/widgets/dialogs/qfilesystemmodel.cpp
+++ b/src/widgets/dialogs/qfilesystemmodel.cpp
@@ -204,6 +204,8 @@ bool QFileSystemModel::remove(const QModelIndex &aindex)
 #ifndef QT_NO_FILESYSTEMWATCHER
     d->fileInfoGatherer.removePath(path);
 #endif
+    if (QFileInfo(path).isFile())
+        return QFile::remove(path);
     return QDir(path).removeRecursively();
 }
 
diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
index 0b9fb5c168065ddf7a2f06c527fe300cca443d2c..61a2abc0845ec03393c3671a77fb9eebe36794aa 100644
--- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
+++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
@@ -115,6 +115,7 @@ private slots:
     void sort();
 
     void mkdir();
+    void deleteFile();
 
     void caseSensitivity();
 
@@ -927,6 +928,25 @@ void tst_QFileSystemModel::mkdir()
     QCOMPARE(oldRow, idx.row());
 }
 
+void tst_QFileSystemModel::deleteFile()
+{
+    QString newFilePath = QDir::temp().filePath("NewFileDeleteTest");
+    QFile newFile(newFilePath);
+    if (newFile.exists()) {
+        if (!newFile.remove())
+            qWarning() << "unable to remove" << newFilePath;
+        QTest::qWait(WAITTIME);
+    }
+    if (!newFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+        qWarning() << "unable to create" << newFilePath;
+    }
+    newFile.close();
+    QModelIndex idx = model->index(newFilePath);
+    QVERIFY(idx.isValid());
+    QVERIFY(model->remove(idx));
+    QVERIFY(!newFile.exists());
+}
+
 void tst_QFileSystemModel::caseSensitivity()
 {
     QString tmp = flatDirTestPath;