浏览代码

Change ctkErrorLogStatusMessageHandler constructor signature

QMainWindow is explicitly passed to ctkErrorLogStatusMessageHandler
constructor instead of being retrieved from the topLevelWidgets.
Jean-Christophe Fillion-Robin 14 年之前
父节点
当前提交
98a51b27c5

+ 1 - 1
Libs/Widgets/Testing/Cpp/ctkErrorLogWidgetTest1.cpp

@@ -112,7 +112,7 @@ int ctkErrorLogWidgetTest1(int argc, char * argv [])
   // --------------------------------------------------------------------------
   // Monitor application StatusBar messages
     {
-    model.registerMsgHandler(new ctkErrorLogStatusMessageHandler);
+    model.registerMsgHandler(new ctkErrorLogStatusMessageHandler(&mainWindow));
     model.setMsgHandlerEnabled(ctkErrorLogStatusMessageHandler::HandlerName, true);
 
     QString expectedStatusText1 = QLatin1String("This is a status message");

+ 9 - 16
Libs/Widgets/ctkErrorLogStatusMessageHandler.cpp

@@ -31,9 +31,10 @@
 QString ctkErrorLogStatusMessageHandler::HandlerName = QLatin1String("Status");
 
 // --------------------------------------------------------------------------
-ctkErrorLogStatusMessageHandler::ctkErrorLogStatusMessageHandler() :
+ctkErrorLogStatusMessageHandler::ctkErrorLogStatusMessageHandler(QMainWindow * mainWindow) :
   QObject(), ctkErrorLogAbstractMessageHandler()
 {
+  this->MainWindow = mainWindow;
 }
 
 // --------------------------------------------------------------------------
@@ -45,35 +46,27 @@ QString ctkErrorLogStatusMessageHandler::handlerName()const
 // --------------------------------------------------------------------------
 void ctkErrorLogStatusMessageHandler::setEnabledInternal(bool value)
 {
-  QMainWindow * mainWindow = 0;
-  foreach(QWidget* widget, qApp->topLevelWidgets())
-    {
-    mainWindow = qobject_cast<QMainWindow*>(widget);
-    if (mainWindow)
-      {
-      break;
-      }
-    }
-  if (!mainWindow)
+  if (!this->MainWindow)
     {
     qCritical() << "ctkErrorLogStatusMessageHandler - "
-                   " QMainWindow object should be instantiated before enabling ctkErrorLogStatusMessageHandler";
+                   " Failed to enable ctkErrorLogStatusMessageHandler - "
+                   "QMainWindow passed to the constructor is Null !";
     return;
     }
-  if (!mainWindow->statusBar())
+  if (!this->MainWindow->statusBar())
     {
     qCritical() << "ctkErrorLogStatusMessageHandler - Failed to enable the message handler: "
-                   "There is no StatusBar associated with QMainWindow" << mainWindow;
+                   "There is no StatusBar associated with QMainWindow" << this->MainWindow;
     return;
     }
   if (value)
     {
-    connect(mainWindow->statusBar(), SIGNAL(messageChanged(QString)),
+    connect(this->MainWindow->statusBar(), SIGNAL(messageChanged(QString)),
             this, SLOT(statusBarMessageChanged(QString)));
     }
   else
     {
-    disconnect(mainWindow->statusBar(), SIGNAL(messageChanged(QString)),
+    disconnect(this->MainWindow->statusBar(), SIGNAL(messageChanged(QString)),
                this, SLOT(statusBarMessageChanged(QString)));
     }
 }

+ 6 - 1
Libs/Widgets/ctkErrorLogStatusMessageHandler.h

@@ -25,13 +25,15 @@
 #include <ctkErrorLogModel.h>
 #include "ctkWidgetsExport.h"
 
+class QMainWindow;
+
 //------------------------------------------------------------------------------
 class CTK_WIDGETS_EXPORT ctkErrorLogStatusMessageHandler :
     public QObject, public ctkErrorLogAbstractMessageHandler
 {
   Q_OBJECT
 public:
-  ctkErrorLogStatusMessageHandler();
+  ctkErrorLogStatusMessageHandler(QMainWindow * mainWindow);
 
   static QString HandlerName;
 
@@ -40,6 +42,9 @@ public:
 
 public slots:
   void statusBarMessageChanged(const QString& text);
+
+private:
+  QMainWindow* MainWindow;
 };
 
 #endif