qurl.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:10k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QURL_H
  38. #define QURL_H
  39. #include <QtCore/qbytearray.h>
  40. #include <QtCore/qobjectdefs.h>
  41. #include <QtCore/qpair.h>
  42. #include <QtCore/qstring.h>
  43. QT_BEGIN_HEADER
  44. QT_BEGIN_NAMESPACE
  45. QT_MODULE(Core)
  46. class QUrlPrivate;
  47. class QDataStream;
  48. class Q_CORE_EXPORT QUrl
  49. {
  50. public:
  51.     enum ParsingMode {
  52.         TolerantMode,
  53.         StrictMode
  54.     };
  55.     // encoding / toString values
  56.     enum FormattingOption {
  57.         None = 0x0,
  58.         RemoveScheme = 0x1,
  59.         RemovePassword = 0x2,
  60.         RemoveUserInfo = RemovePassword | 0x4,
  61.         RemovePort = 0x8,
  62.         RemoveAuthority = RemoveUserInfo | RemovePort | 0x10,
  63.         RemovePath = 0x20,
  64.         RemoveQuery = 0x40,
  65.         RemoveFragment = 0x80,
  66.         StripTrailingSlash = 0x10000
  67.     };
  68.     Q_DECLARE_FLAGS(FormattingOptions, FormattingOption)
  69.     QUrl();
  70.     QUrl(const QString &url);
  71.     QUrl(const QString &url, ParsingMode mode);
  72.     // ### Qt 5: merge the two constructors, with mode = TolerantMode
  73.     QUrl(const QUrl &copy);
  74.     QUrl &operator =(const QUrl &copy);
  75.     QUrl &operator =(const QString &url);
  76.     ~QUrl();
  77.     void setUrl(const QString &url);
  78.     void setUrl(const QString &url, ParsingMode mode);
  79.     // ### Qt 5: merge the two setUrl() functions, with mode = TolerantMode
  80.     void setEncodedUrl(const QByteArray &url);
  81.     void setEncodedUrl(const QByteArray &url, ParsingMode mode);
  82.     // ### Qt 5: merge the two setEncodedUrl() functions, with mode = TolerantMode
  83.     bool isValid() const;
  84.     bool isEmpty() const;
  85.     void clear();
  86.     void setScheme(const QString &scheme);
  87.     QString scheme() const;
  88.     void setAuthority(const QString &authority);
  89.     QString authority() const;
  90.     void setUserInfo(const QString &userInfo);
  91.     QString userInfo() const;
  92.     void setUserName(const QString &userName);
  93.     QString userName() const;
  94.     void setEncodedUserName(const QByteArray &userName);
  95.     QByteArray encodedUserName() const;
  96.     void setPassword(const QString &password);
  97.     QString password() const;
  98.     void setEncodedPassword(const QByteArray &password);
  99.     QByteArray encodedPassword() const;
  100.     void setHost(const QString &host);
  101.     QString host() const;
  102.     void setEncodedHost(const QByteArray &host);
  103.     QByteArray encodedHost() const;
  104.     void setPort(int port);
  105.     int port() const;
  106.     int port(int defaultPort) const;
  107.     // ### Qt 5: merge the two port() functions, with defaultPort = -1
  108.     void setPath(const QString &path);
  109.     QString path() const;
  110.     void setEncodedPath(const QByteArray &path);
  111.     QByteArray encodedPath() const;
  112.     bool hasQuery() const;
  113.     void setEncodedQuery(const QByteArray &query);
  114.     QByteArray encodedQuery() const;
  115.     void setQueryDelimiters(char valueDelimiter, char pairDelimiter);
  116.     char queryValueDelimiter() const;
  117.     char queryPairDelimiter() const;
  118.     void setQueryItems(const QList<QPair<QString, QString> > &query);
  119.     void addQueryItem(const QString &key, const QString &value);
  120.     QList<QPair<QString, QString> > queryItems() const;
  121.     bool hasQueryItem(const QString &key) const;
  122.     QString queryItemValue(const QString &key) const;
  123.     QStringList allQueryItemValues(const QString &key) const;
  124.     void removeQueryItem(const QString &key);
  125.     void removeAllQueryItems(const QString &key);
  126.     void setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &query);
  127.     void addEncodedQueryItem(const QByteArray &key, const QByteArray &value);
  128.     QList<QPair<QByteArray, QByteArray> > encodedQueryItems() const;
  129.     bool hasEncodedQueryItem(const QByteArray &key) const;
  130.     QByteArray encodedQueryItemValue(const QByteArray &key) const;
  131.     QList<QByteArray> allEncodedQueryItemValues(const QByteArray &key) const;
  132.     void removeEncodedQueryItem(const QByteArray &key);
  133.     void removeAllEncodedQueryItems(const QByteArray &key);
  134.     void setFragment(const QString &fragment);
  135.     QString fragment() const;
  136.     void setEncodedFragment(const QByteArray &fragment);
  137.     QByteArray encodedFragment() const;
  138.     bool hasFragment() const;
  139.     QUrl resolved(const QUrl &relative) const;
  140.     bool isRelative() const;
  141.     bool isParentOf(const QUrl &url) const;
  142.     static QUrl fromLocalFile(const QString &localfile);
  143.     QString toLocalFile() const;
  144.     QString toString(FormattingOptions options = None) const;
  145.     QByteArray toEncoded(FormattingOptions options = None) const;
  146.     static QUrl fromEncoded(const QByteArray &url);
  147.     static QUrl fromEncoded(const QByteArray &url, ParsingMode mode);
  148.     // ### Qt 5: merge the two fromEncoded() functions, with mode = TolerantMode
  149.     void detach();
  150.     bool isDetached() const;
  151.     bool operator <(const QUrl &url) const;
  152.     bool operator ==(const QUrl &url) const;
  153.     bool operator !=(const QUrl &url) const;
  154.     static QString fromPercentEncoding(const QByteArray &);
  155.     static QByteArray toPercentEncoding(const QString &,
  156.                                         const QByteArray &exclude = QByteArray(),
  157.                                         const QByteArray &include = QByteArray());
  158.     static QString fromPunycode(const QByteArray &);
  159.     static QByteArray toPunycode(const QString &);
  160.     static QString fromAce(const QByteArray &);
  161.     static QByteArray toAce(const QString &);
  162.     static QStringList idnWhitelist();
  163.     static void setIdnWhitelist(const QStringList &);
  164. #if defined QT3_SUPPORT
  165.     inline QT3_SUPPORT QString protocol() const { return scheme(); }
  166.     inline QT3_SUPPORT void setProtocol(const QString &s) { setScheme(s); }
  167.     inline QT3_SUPPORT void setUser(const QString &s) { setUserName(s); }
  168.     inline QT3_SUPPORT QString user() const { return userName(); }
  169.     inline QT3_SUPPORT bool hasUser() const { return !userName().isEmpty(); }
  170.     inline QT3_SUPPORT bool hasPassword() const { return !password().isEmpty(); }
  171.     inline QT3_SUPPORT bool hasHost() const { return !host().isEmpty(); }
  172.     inline QT3_SUPPORT bool hasPort() const { return port() != -1; }
  173.     inline QT3_SUPPORT bool hasPath() const { return !path().isEmpty(); }
  174.     inline QT3_SUPPORT void setQuery(const QString &txt)
  175.     {
  176.         setEncodedQuery(txt.toLatin1());
  177.     }
  178.     inline QT3_SUPPORT QString query() const
  179.     {
  180.         return QString::fromLatin1(encodedQuery());
  181.     }
  182.     inline QT3_SUPPORT QString ref() const { return fragment(); }
  183.     inline QT3_SUPPORT void setRef(const QString &txt) { setFragment(txt); }
  184.     inline QT3_SUPPORT bool hasRef() const { return !fragment().isEmpty(); }
  185.     inline QT3_SUPPORT void addPath(const QString &p) { setPath(path() + QLatin1String("/") + p); }
  186.     QT3_SUPPORT void setFileName(const QString &txt);
  187.     QT3_SUPPORT QString fileName() const;
  188.     QT3_SUPPORT QString dirPath() const;
  189.     static inline QT3_SUPPORT void decode(QString &url)
  190.     {
  191.         url = QUrl::fromPercentEncoding(url.toLatin1());
  192.     }
  193.     static inline QT3_SUPPORT void encode(QString &url)
  194.     {
  195.         url = QString::fromLatin1(QUrl::toPercentEncoding(url));
  196.     }
  197.     inline QT3_SUPPORT operator QString() const { return toString(); }
  198.     inline QT3_SUPPORT bool cdUp()
  199.     {
  200.         *this = resolved(QUrl(QLatin1String("..")));
  201.         return true;
  202.     }
  203.     static inline QT3_SUPPORT bool isRelativeUrl(const QString &url)
  204.     {
  205.         return QUrl(url).isRelative();
  206.     }
  207. #endif
  208.     QString errorString() const;
  209. protected:
  210. #if defined (QT3_SUPPORT)
  211.     inline QT3_SUPPORT void reset() { clear(); }
  212. #endif
  213. private:
  214.     QUrlPrivate *d;
  215. public:
  216.     typedef QUrlPrivate * DataPtr;
  217.     inline DataPtr &data_ptr() { return d; }
  218. };
  219. Q_DECLARE_TYPEINFO(QUrl, Q_MOVABLE_TYPE);
  220. Q_DECLARE_SHARED(QUrl)
  221. Q_DECLARE_OPERATORS_FOR_FLAGS(QUrl::FormattingOptions)
  222. #ifndef QT_NO_DATASTREAM
  223. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QUrl &);
  224. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QUrl &);
  225. #endif
  226. #ifndef QT_NO_DEBUG_STREAM
  227. Q_CORE_EXPORT QDebug operator<<(QDebug, const QUrl &);
  228. #endif
  229. QT_END_NAMESPACE
  230. QT_END_HEADER
  231. #endif // QURL_H