Il 22/04/2014 23:12, Thiago Macieira ha scritto:
http://macieira.org/~thiago/qt-5.3/QtCore.diff


QtCore.diff

+    void warning(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
+    void critical(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
+
+    typedef const QLoggingCategory &(*CategoryFunction)();
+
+    void debug(const QLoggingCategory &cat, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+    void debug(CategoryFunction catFunc, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+    void warning(const QLoggingCategory &cat, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+    void warning(CategoryFunction catFunc, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+    void critical(const QLoggingCategory &cat, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+    void critical(CategoryFunction catFunc, const char *msg, ...) const 
Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);

diff --git a/src/corelib/io/qloggingcategory.h 
b/src/corelib/io/qloggingcategory.h
index 15c0519..4aec8e6 100644
--- a/src/corelib/io/qloggingcategory.h
+++ b/src/corelib/io/qloggingcategory.h
@@ -65,6 +65,7 @@ public:

      // allows usage of both factory method and variable in qCX macros
      QLoggingCategory &operator()() { return *this; }
+    const QLoggingCategory &operator()() const { return *this; }

      static QLoggingCategory *defaultCategory();

@@ -84,25 +85,36 @@ private:
  };

  #define Q_DECLARE_LOGGING_CATEGORY(name) \
-    extern QLoggingCategory &name();
+    extern const QLoggingCategory &name();

  // relies on QLoggingCategory(QString) being thread safe!
  #define Q_LOGGING_CATEGORY(name, string) \
-    QLoggingCategory &name() \
+    const QLoggingCategory &name() \
      { \
-        static QLoggingCategory category(string); \
+        static const QLoggingCategory category(string); \
          return category; \
      }

-#define qCDebug(category) \
-    for (bool enabled = category().isDebugEnabled(); Q_UNLIKELY(enabled); 
enabled = false) \
-        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).debug()
-#define qCWarning(category) \
-    for (bool enabled = category().isWarningEnabled(); enabled; enabled = 
false) \
-        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).warning()
-#define qCCritical(category) \
-    for (bool enabled = category().isCriticalEnabled(); enabled; enabled = 
false) \
-        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).critical()
+#ifdef Q_COMPILER_VARIADIC_MACROS
+
+#define qCDebug(category, ...) \
+    for (bool qt_category_enabled = category().isDebugEnabled(); 
qt_category_enabled; qt_category_enabled = false) \
+        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).debug(__VA_ARGS__)
+#define qCWarning(category, ...) \
+    for (bool qt_category_enabled = category().isWarningEnabled(); 
qt_category_enabled; qt_category_enabled = false) \
+        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).warning(__VA_ARGS__)
+#define qCCritical(category, ...) \
+    for (bool qt_category_enabled = category().isCriticalEnabled(); 
qt_category_enabled; qt_category_enabled = false) \
+        QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO, 
category().categoryName()).critical(__VA_ARGS__)
+
+#else
+
+// check for enabled category inside QMessageLogger.
+#define qCDebug qDebug
+#define qCWarning qWarning
+#define qCCritical qCritical
+
+#endif // Q_COMPILER_VARIADIC_MACROS

  #if defined(QT_NO_DEBUG_OUTPUT)
  #  undef qCDebug

These two change combined trigger QTBUG-37283: it's now not possible to use qCDebug(cat) on a compiler w/o variadic macros, where cat is a function that returns a QLoggingCategory subclass. That's because

    const QLoggingCategorySubclass &(*)()

is not a type compatible with CategoryFunction above. Perhaps the header can be refactored?

@@ -512,6 +518,9 @@ public:
          AA_SynthesizeTouchForUnhandledMouseEvents = 11,
          AA_SynthesizeMouseForUnhandledTouchEvents = 12,
          AA_UseHighDpiPixmaps = 13,
+        AA_ForceRasterWidgets = 14,
+        AA_UseDesktopOpenGL = 15,
+        AA_UseOpenGLES = 16,

Are the last two already used in 5.3?

Thanks,
--
Join us Oct 6-8 at BCC Berlin for Qt Developer Days 2014!
Giuseppe D'Angelo | giuseppe.dang...@kdab.com | Software Engineer
KDAB (UK) Ltd., a KDAB Group company
Tel. UK +44-1738-450410, Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-independent software solutions

Attachment: smime.p7s
Description: Firma crittografica S/MIME

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to