Index: umbrello/codeimport/kdevcppparser/lexer.h
===================================================================
--- umbrello/codeimport/kdevcppparser/lexer.h	(revision 820894)
+++ umbrello/codeimport/kdevcppparser/lexer.h	(working copy)
@@ -51,12 +51,6 @@
 using boost::spirit::scanner;
 using boost::spirit::ext::skip_rule_parser;
 
-typedef boost::spirit::position_iterator<QChar const*> CharIterator;
-typedef rule<scanner<CharIterator> > SkipRule;
-typedef skip_rule_parser<SkipRule, CharIterator> CharParser;
-typedef scanner<CharIterator> CharScanner;
-typedef CharParser::skip_scanner_policies_t CharPolicies;
-
 struct LexerData;
 
 class Lexer {
@@ -131,9 +125,15 @@
     void set_filename( PositionFilename const& p_filename)
     {m_filename = p_filename;}
     void set_source( QString const& source) {
+#ifdef Q_CC_MSVC
+      m_ptr = CharIterator( source.toAscii().constData(),
+			    source.toAscii().constData() + source.length()
+			    );
+#else
       m_ptr = CharIterator( source.data(),
 			    source.data() + source.length(),
 			    Position( m_filename));
+#endif
     }
     /* getters */
     Position get_currentPosition() const {return m_ptr.get_position();}
Index: umbrello/codeimport/kdevcppparser/position.h
===================================================================
--- umbrello/codeimport/kdevcppparser/position.h	(revision 820894)
+++ umbrello/codeimport/kdevcppparser/position.h	(working copy)
@@ -35,14 +35,22 @@
 }
 
 #else
+#ifdef Q_CC_MSVC
+typedef boost::spirit::file_position_base<std::string> Position;
+typedef std::string PositionFilename;
+
+ inline PositionFilename QString2PositionFilename( QString const& p) {
+  return (char const*)p.toAscii();
+}
+#else
 # include <QChar>
-
 typedef boost::spirit::file_position_base<std::basic_string<QChar> > Position;
 typedef std::basic_string<QChar> PositionFilename;
 
 inline PositionFilename QString2PositionFilename( QString const& p) {
   return p.data();
 }
+#endif
 
 #endif
 
Index: umbrello/codeimport/kdevcppparser/preprocesslexer.h
===================================================================
--- umbrello/codeimport/kdevcppparser/preprocesslexer.h	(revision 820894)
+++ umbrello/codeimport/kdevcppparser/preprocesslexer.h	(working copy)
@@ -50,7 +50,11 @@
 using boost::spirit::scanner;
 using boost::spirit::ext::skip_rule_parser;
 
+#ifdef Q_CC_MSVC
+typedef boost::spirit::position_iterator<char const*> CharIterator;
+#else
 typedef boost::spirit::position_iterator<QChar const*> CharIterator;
+#endif
 typedef rule<scanner<CharIterator> > SkipRule;
 typedef skip_rule_parser<SkipRule, CharIterator> CharParser;
 typedef scanner<CharIterator> CharScanner;
@@ -181,19 +185,36 @@
 
   operator int () const {return m_type;}
 
-  bool isNull() const {return m_type == Token_eof || m_text.isEmpty();}
-
+  bool isNull() const {
+    return m_type == Token_eof || 
+#ifdef Q_CC_MSVC 
+    m_text.empty();
+#else
+    m_text.isEmpty();
+#endif
+  }
   int type() const {return m_type;}
 
   Position const& getStartPosition() const {return m_start;}
   Position const& getEndPosition() const {return m_end;}
   unsigned int length() const {return m_text.length();}
 
-  QString const& text() const {return m_text;}
+  QString const text() const {
+#ifdef Q_CC_MSVC
+     return QString(m_text.c_str());
+#else
+     return m_text;
+#endif
+   }
+     
 private:
   int m_type;
   Position m_start, m_end;
+#ifdef Q_CC_MSVC
+    std::string m_text;
+#else
   QString m_text;
+#endif
 };
 
 class PreprocessLexer
@@ -284,12 +305,20 @@
     void set_source( const QString& source,
 		     PositionFilename const& p_filename) {
       m_source = source;
+#ifdef Q_CC_MSVC
+      m_ptr = CharIterator( m_source.toAscii().constData(),
+			    m_source.toAscii().constData() + m_source.length()
+			    );
+#else
       m_ptr = CharIterator( m_source.data(),
 			    m_source.data() + m_source.length(),
 			    Position( p_filename));
+#endif
     }
+#ifndef Q_CC_MSVC
     QString substrFrom( CharIterator start) const
     {return QString( &*start, &*m_ptr - &*start);}
+#endif
     /* getters */
     Position get_currentPosition() const {return m_ptr.get_position();}
     CharIterator get_ptr() const {return m_ptr;}