Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-68949

Signal Parameter werden als "undefined" angezeigt.

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P2: Important
    • Resolution: Duplicate
    • Affects Version/s: 5.11.0
    • Fix Version/s: 5.11.1
    • Component/s: QML: Tooling
    • Labels:
      None
    • Environment:
      Qt Creator 4.6.2

      Qt Creator 4.7.0 - Beta1

      Windows 10 Enterprise
    • Commits:
      2f4b8f159545b545d4b49cb3c1429c09522519ee

      Description

      Ich habe eine Klasse als Singleton registriert.

       qmlRegisterSingletonType<CTaskManager>("Singletons", 1, 0,"TaskManager", [](QQmlEngine*, QJSEngine*) -> QObject*
          {
              CTaskManager* pInstance = new CTaskManager();
              return pInstance;
          });
      

      Damit werden verschiedenen Aufgaben in einen seperaten Thread ausgelagert.

      void CTaskManager::runAsync(CTask* task)
      {
          Q_CHECK_PTR(task);
      
          QThread* thread  = new QThread();
      
          task->moveToThread(thread);
      
          connect(this    , SIGNAL(canceled())                                        , task  , SLOT(cancel())                                            , Qt::DirectConnection);
          connect(task    , SIGNAL(progressChanged(float))                            , this  , SLOT(setProgress(float))                                  , Qt::DirectConnection);
          connect(task    , SIGNAL(finished(bool,unsigned int, const QVariantMap&))   , this  , SLOT(setFinished(bool,unsigned int, const QVariantMap&))  , Qt::DirectConnection);
      
          connect(thread  , SIGNAL(started())                                         , task  , SLOT(run()));
      
          connect(task    , SIGNAL(finished(bool,unsigned int, const QVariantMap&))   , thread, SLOT(quit()));
      
          connect(thread  , SIGNAL(finished())                                        , task  , SLOT(deleteLater()));
          connect(thread  , SIGNAL(finished())                                        , thread, SLOT(deleteLater()));
      
          thread->start();
      }
      

      Diese Task Objekte schicken ein Signal an den CTaskManger(QML-Singleton) wenn sie abgearbeitet sind. Das Signal wird dann weitergeleitet und in QML ausgewertet.

      void CTaskManager::setFinished(bool canceled, unsigned int error, const QVariantMap& args)
      {
          Q_ASSERT(true == this->running());
      
          this->setRunning(false);
          emit this->finished(canceled, error, args);
      }
      

      Auf QML Seite habe ich zu dem finished Signal eine Connection die dann anhand der übergebenen Parameter die weitere Auswertung übernimmt.

          Connections
          {
              target: TaskManager
              onFinished:
              {
                  if (false === canceled)
                  ... usw..
      

      Der Parameter canceled sowie error und args werden im Creator als "undefined" angezeigt und können nicht ausgewertet werden.

      Wird das selbe Projekt unter LINUX-Mint-Cinnamon gestartet tritt dieser Fehler NICHT auf!

       

        Attachments

          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              Assignee:
              ulherman Ulf Hermann
              Reporter:
              tristan74656 Tristan Heitzinger
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Gerrit Reviews

                  There are no open Gerrit changes