qcoreapplication.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 QCOREAPPLICATION_H
  38. #define QCOREAPPLICATION_H
  39. #include <QtCore/qobject.h>
  40. #include <QtCore/qcoreevent.h>
  41. #include <QtCore/qeventloop.h>
  42. #ifdef QT_INCLUDE_COMPAT
  43. #include <QtCore/qstringlist.h>
  44. #endif
  45. #if defined(Q_WS_WIN) && !defined(tagMSG)
  46. typedef struct tagMSG MSG;
  47. #endif
  48. QT_BEGIN_HEADER
  49. QT_BEGIN_NAMESPACE
  50. QT_MODULE(Core)
  51. class QCoreApplicationPrivate;
  52. class QTextCodec;
  53. class QTranslator;
  54. class QPostEventList;
  55. class QStringList;
  56. #define qApp QCoreApplication::instance()
  57. class Q_CORE_EXPORT QCoreApplication : public QObject
  58. {
  59.     Q_OBJECT
  60.     Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName)
  61.     Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion)
  62.     Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName)
  63.     Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain)
  64.     Q_DECLARE_PRIVATE(QCoreApplication)
  65. public:
  66.     QCoreApplication(int &argc, char **argv);
  67.     ~QCoreApplication();
  68. #ifdef QT_DEPRECATED
  69.     QT_DEPRECATED static int argc();
  70.     QT_DEPRECATED static char **argv();
  71. #endif
  72.     static QStringList arguments();
  73.     static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true);
  74.     static bool testAttribute(Qt::ApplicationAttribute attribute);
  75.     static void setOrganizationDomain(const QString &orgDomain);
  76.     static QString organizationDomain();
  77.     static void setOrganizationName(const QString &orgName);
  78.     static QString organizationName();
  79.     static void setApplicationName(const QString &application);
  80.     static QString applicationName();
  81.     static void setApplicationVersion(const QString &version);
  82.     static QString applicationVersion();
  83.     static QCoreApplication *instance() { return self; }
  84.     static int exec();
  85.     static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents);
  86.     static void processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime);
  87.     static void exit(int retcode=0);
  88.     static bool sendEvent(QObject *receiver, QEvent *event);
  89.     static void postEvent(QObject *receiver, QEvent *event);
  90.     static void postEvent(QObject *receiver, QEvent *event, int priority);
  91.     static void sendPostedEvents(QObject *receiver, int event_type);
  92.     static void sendPostedEvents();
  93.     static void removePostedEvents(QObject *receiver);
  94.     static void removePostedEvents(QObject *receiver, int eventType);
  95.     static bool hasPendingEvents();
  96.     virtual bool notify(QObject *, QEvent *);
  97.     static bool startingUp();
  98.     static bool closingDown();
  99.     static QString applicationDirPath();
  100.     static QString applicationFilePath();
  101.     static qint64 applicationPid();
  102. #ifndef QT_NO_LIBRARY
  103.     static void setLibraryPaths(const QStringList &);
  104.     static QStringList libraryPaths();
  105.     static void addLibraryPath(const QString &);
  106.     static void removeLibraryPath(const QString &);
  107. #endif // QT_NO_LIBRARY
  108. #ifndef QT_NO_TRANSLATION
  109.     static void installTranslator(QTranslator * messageFile);
  110.     static void removeTranslator(QTranslator * messageFile);
  111. #endif
  112.     enum Encoding { CodecForTr, UnicodeUTF8, DefaultCodec = CodecForTr };
  113.     // ### Qt 5: merge
  114.     static QString translate(const char * context,
  115.                              const char * key,
  116.                              const char * comment = 0,
  117.                              Encoding encoding = CodecForTr);
  118.     static QString translate(const char * context,
  119.                              const char * key,
  120.                              const char * comment,
  121.                              Encoding encoding, int n);
  122.     static void flush();
  123. #if defined(QT3_SUPPORT)
  124.     inline QT3_SUPPORT void lock() {}
  125.     inline QT3_SUPPORT void unlock(bool = true) {}
  126.     inline QT3_SUPPORT bool locked() { return false; }
  127.     inline QT3_SUPPORT bool tryLock() { return false; }
  128.     static inline QT3_SUPPORT void processOneEvent()
  129.     { processEvents(QEventLoop::WaitForMoreEvents); }
  130.     static QT3_SUPPORT int enter_loop();
  131.     static QT3_SUPPORT void exit_loop();
  132.     static QT3_SUPPORT int loopLevel();
  133. #endif
  134. #if defined(Q_WS_WIN)
  135.     virtual bool winEventFilter(MSG *message, long *result);
  136. #endif
  137. #ifdef Q_OS_UNIX
  138.     static void watchUnixSignal(int signal, bool watch);
  139. #endif
  140.     typedef bool (*EventFilter)(void *message, long *result);
  141.     EventFilter setEventFilter(EventFilter filter);
  142.     bool filterEvent(void *message, long *result);
  143. public Q_SLOTS:
  144.     static void quit();
  145. Q_SIGNALS:
  146.     void aboutToQuit();
  147.     void unixSignal(int);
  148. protected:
  149.     bool event(QEvent *);
  150.     virtual bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
  151. protected:
  152.     QCoreApplication(QCoreApplicationPrivate &p);
  153. private:
  154.     static bool sendSpontaneousEvent(QObject *receiver, QEvent *event);
  155.     bool notifyInternal(QObject *receiver, QEvent *event);
  156.     void init();
  157.     static QCoreApplication *self;
  158.     friend class QEventDispatcherUNIXPrivate;
  159.     friend class QApplication;
  160.     friend class QApplicationPrivate;
  161.     friend class QETWidget;
  162.     friend class Q3AccelManager;
  163.     friend class QShortcutMap;
  164.     friend class QWidget;
  165.     friend class QWidgetPrivate;
  166.     friend bool qt_sendSpontaneousEvent(QObject*, QEvent*);
  167.     friend Q_CORE_EXPORT QString qAppName();
  168.     friend class QClassFactory;
  169. };
  170. inline bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
  171. {  if (event) event->spont = false; return self ? self->notifyInternal(receiver, event) : false; }
  172. inline bool QCoreApplication::sendSpontaneousEvent(QObject *receiver, QEvent *event)
  173. { if (event) event->spont = true; return self ? self->notifyInternal(receiver, event) : false; }
  174. inline void QCoreApplication::sendPostedEvents() { sendPostedEvents(0, 0); }
  175. #ifdef QT_NO_TRANSLATION
  176. // Simple versions
  177. inline QString QCoreApplication::translate(const char *, const char *sourceText,
  178.                                            const char *, Encoding encoding)
  179. {
  180. #ifndef QT_NO_TEXTCODEC
  181.     if (encoding == UnicodeUTF8)
  182.         return QString::fromUtf8(sourceText);
  183. #else
  184.     Q_UNUSED(encoding)
  185. #endif
  186.     return QString::fromLatin1(sourceText);
  187. }
  188. // Simple versions
  189. inline QString QCoreApplication::translate(const char *, const char *sourceText,
  190.                                            const char *, Encoding encoding, int)
  191. {
  192. #ifndef QT_NO_TEXTCODEC
  193.     if (encoding == UnicodeUTF8)
  194.         return QString::fromUtf8(sourceText);
  195. #else
  196.     Q_UNUSED(encoding)
  197. #endif
  198.     return QString::fromLatin1(sourceText);
  199. }
  200. #endif
  201. // ### merge the four functions into two (using "int n = -1")
  202. #define Q_DECLARE_TR_FUNCTIONS(context) 
  203. public: 
  204.     static inline QString tr(const char *sourceText, const char *comment = 0) 
  205.         { return QCoreApplication::translate(#context, sourceText, comment); } 
  206.     static inline QString trUtf8(const char *sourceText, const char *comment = 0) 
  207.         { return QCoreApplication::translate(#context, sourceText, comment, 
  208.                                              QCoreApplication::UnicodeUTF8); } 
  209.     static inline QString tr(const char *sourceText, const char *comment, int n) 
  210.         { return QCoreApplication::translate(#context, sourceText, comment, 
  211.                                              QCoreApplication::CodecForTr, n); } 
  212.     static inline QString trUtf8(const char *sourceText, const char *comment, int n) 
  213.         { return QCoreApplication::translate(#context, sourceText, comment, 
  214.                                              QCoreApplication::UnicodeUTF8, n); } 
  215. private:
  216. typedef void (*QtCleanUpFunction)();
  217. Q_CORE_EXPORT void qAddPostRoutine(QtCleanUpFunction);
  218. Q_CORE_EXPORT void qRemovePostRoutine(QtCleanUpFunction);
  219. Q_CORE_EXPORT QString qAppName();                // get application name
  220. #if defined(Q_WS_WIN) && !defined(QT_NO_DEBUG_STREAM)
  221. Q_CORE_EXPORT QString decodeMSG(const MSG &);
  222. Q_CORE_EXPORT QDebug operator<<(QDebug, const MSG &);
  223. #endif
  224. QT_END_NAMESPACE
  225. QT_END_HEADER
  226. #endif // QCOREAPPLICATION_H