Quantcast
Channel: Qt DevNet forums: Qt Quick 1283365070**
Viewing all articles
Browse latest Browse all 4972

Program crash when I combine Loader and ProgressBar

$
0
0
When I use Loader to load my own component and change the value of the ProgressBar through it the program always crash;If I don’t use Loader to load my own component, the program wouldn’t crash, why? os : mac 10.8.3 compiler: clang3.2 Qt ver : 5.1 main.qml import QtQuick 2.1 import QtQuick.Controls 1.0 import QtQuick.Dialogs 1.0 import QtQuick.Layouts 1.0   import Test 1.0   ApplicationWindow{     id: root       title: "Color Correction"       color: syspal.window     width: 1450     height: 750     minimumHeight: 750     minimumWidth: 1400       SystemPalette {id: syspal}       //with Loader, this version would crash     Component{         id: compProgressTest           ProgressConnection{           }     }       Loader{         id: loader           sourceComponent: null           onStatusChanged: {             if(loader.status == Loader.Ready){                 console.log("Ready")             }         }     }       Row{         anchors.fill: parent           Button{             text: "reload"             onClicked: {                 loader.sourceComponent = null                 loader.sourceComponent = compProgressTest             }         }           Button{             text: "run"             onClicked: {                 if(loader.status == Loader.Ready){                     loader.item.addProgressValue()                 }             }         }           ProgressBar{             id: progressBar               maximumValue: loader.status == Loader.Ready ? loader.item.progressMaximum : 1             value: loader.status == Loader.Ready ? loader.item.progressValue : 0               onValueChanged: {                 console.log("progress bar value = " + progressBar.value)             }         }     } //*/       /*     //without Loader, this version wouldn't crash     ProgressConnection{         id: progressConnection     }       Row{         anchors.fill: parent           Button{             text: "run"             onClicked: {                 progressConnection.addProgressValue()             }         }           ProgressBar{             id: progressBar               maximumValue: progressConnection.progressMaximum             value: progressConnection.progressValue               onValueChanged: {                 console.log("progress bar value = " + progressBar.value)             }         }     }//*/   } .hpp #ifndef PROGRESSCONNECTION_HPP #define PROGRESSCONNECTION_HPP   #include <QObject>   class progressConnection : public QObject {     Q_OBJECT     Q_PROPERTY(int progressMaximum READ progressMaximum WRITE setProgressMaximum NOTIFY progressMaximumChanged)     Q_PROPERTY(int progressValue READ progressValue WRITE setProgressValue NOTIFY progressValueChanged) public:     explicit progressConnection(QObject *parent = 0);           Q_INVOKABLE void addProgressValue();       int progressMaximum() const;     int progressValue() const;       void setProgressMaximum(int value);     void setProgressValue(int value);     signals:     void progressMaximumChanged();     void progressValueChanged();   private:     void addProgressValueImpl();   private:       int progressMaximum_;     int progressValue_;       int size_; };   #endif // PROGRESSCONNECTION_HPP .cpp #include "progressConnection.hpp"   progressConnection::progressConnection(QObject *parent) :     QObject(parent),     progressMaximum_(1),     progressValue_(0),     size_(100000) {           }   void progressConnection::addProgressValue() {     setProgressMaximum(size_);     setProgressValue(0);       addProgressValueImpl(); }   int progressConnection::progressMaximum() const {     return progressMaximum_; }   int progressConnection::progressValue() const {     return progressValue_; }   void progressConnection::setProgressMaximum(int value) {     if(value != progressMaximum_){         progressMaximum_ = value;         emit progressMaximumChanged();     } }   void progressConnection::setProgressValue(int value) {       if(value != progressValue_){         progressValue_ = value;         emit progressValueChanged();     } }   void progressConnection::addProgressValueImpl() {     for(int i = 0; i != size_; ++i){         setProgressValue(i);     } } What is the problem?

Viewing all articles
Browse latest Browse all 4972

Trending Articles