diff --git a/extra/qt/PKGBUILD b/extra/qt/PKGBUILD
index d9af4a93a..897668f2d 100644
--- a/extra/qt/PKGBUILD
+++ b/extra/qt/PKGBUILD
@@ -14,7 +14,7 @@ plugrel=1
 pkgbase=qt
 pkgname=('qt' 'qt-private-headers')
 pkgver=4.8.0
-pkgrel=2
+pkgrel=4
 arch=('i686' 'x86_64')
 url='http://qt-project.org/'
 license=('GPL3' 'LGPL')
@@ -26,22 +26,27 @@ options=('!libtool' '!distcc' '!ccache')
 _pkgfqn="${pkgbase}-everywhere-opensource-src-${pkgver}"
 source=("http://get.qt.nokia.com/qt/source/${_pkgfqn}.tar.gz"
         'assistant.desktop' 'designer.desktop' 'linguist.desktop'
-        'qtconfig.desktop')
+        'qtconfig.desktop'
+        'fix-qurl.patch')
 md5sums=('e8a5fdbeba2927c948d9f477a6abe904'
          'fc211414130ab2764132e7370f8e5caa'
          '85179f5e0437514f8639957e1d8baf62'
          'f11852b97583610f3dbb669ebc3e21bc'
-         '6b771c8a81dd90b45e8a79afa0e5bbfd')
+         '6b771c8a81dd90b45e8a79afa0e5bbfd'
+         '7bc255a36733d0fbc80c1902ade4beca')
 
 build() {
   cd "${srcdir}"/${_pkgfqn}
 
+  # (FS#27757)
+  patch -p1 -i "${srcdir}"/fix-qurl.patch
+
   export QT4DIR="${srcdir}"/${_pkgfqn}
   export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH}
 
   export CXXFLAGS="$CXXFLAGS -fno-strict-volatile-bitfields"
 
-  sed -i "s|-O2|${CXXFLAGS}|" mkspecs/common/g++-base.conf
+  sed -i "s|-O2|${CXXFLAGS}|" mkspecs/common/{g++,gcc}-base.conf
   sed -i "/^QMAKE_LFLAGS_RPATH/s| -Wl,-rpath,||g" mkspecs/common/gcc-base-unix.conf
   sed -i "/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g" mkspecs/common/gcc-base.conf
 
diff --git a/extra/qt/fix-qurl.patch b/extra/qt/fix-qurl.patch
new file mode 100644
index 000000000..c18cd7159
--- /dev/null
+++ b/extra/qt/fix-qurl.patch
@@ -0,0 +1,13 @@
+diff -up qt-everywhere-opensource-src-4.8.0/src/corelib/io/qurl.cpp.toLocalFile qt-everywhere-opensource-src-4.8.0/src/corelib/io/qurl.cpp
+--- qt-everywhere-opensource-src-4.8.0/src/corelib/io/qurl.cpp.toLocalFile	2011-10-03 22:44:32.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.0/src/corelib/io/qurl.cpp	2011-10-27 12:58:35.706815049 -0500
+@@ -6158,7 +6158,8 @@ QUrl QUrl::fromLocalFile(const QString &
+ QString QUrl::toLocalFile() const
+ {
+     // the call to isLocalFile() also ensures that we're parsed
+-    if (!isLocalFile())
++    // Treat URLs with no scheme as local for backward compatibility
++    if (!isLocalFile() && (!d || !d->scheme.isEmpty()))
+         return QString();
+
+     QString tmp;