BlinCT
30 декабря 2018 г. 19:22

Динамическое создание обьекта и добавление в StackView QML

qml, c++

Всем привет.
Столкнулся с такой проблемой, на стороне С++ я создаю динамически обьект, его получаю на стороне QML и нужно его добавить в StackView.
И как это сделать не могу придумать. Ниже кидаю крестовую часть и QML

  1. TimerContainer::TimerContainer(QObject *parent)
  2. : QObject(parent)
  3. {
  4. vec_ = new vector<CircleTimer*>();
  5. createTimer();
  6. }
  7.  
  8. CircleTimer *TimerContainer::getTimer(int index)
  9. {
  10. return vec_->at(index);
  11. }
  12.  
  13. void TimerContainer::delTimer(int index)
  14. {
  15. vec_->erase(vec_->begin() + index);
  16. emit sizeChanged(vec_->size());
  17. }
  18.  
  19. void TimerContainer::createTimer()
  20. {
  21. auto timer = new CircleTimer();
  22. vec_->push_back(timer);
  23. emit sizeChanged(vec_->size());
  24. emit addNewTimer(timer);
  25. }
  26.  
  27. void TimerContainer::createTimers(int number)
  28. {
  29. if (number != 0)
  30. {
  31. while (number != 0)
  32. {
  33. createTimer();
  34. --number;
  35. }
  36. }
  37. }
  38.  
  39. int TimerContainer::size()
  40. {
  41. return vec_->size();
  42. }
  43.  

QML

  1. StackView
  2. {
  3. id: timers
  4.  
  5. property var currentTimer: QtObject
  6. property int currentIndex: -1
  7. property int targetId: 0
  8.  
  9. function selectTimer(idx)
  10. {
  11. for (var i = 0; i < timerContainer.size; ++i)
  12. {
  13. //timerContainer.getTimer(idx).visible = (i === idx);
  14. //console.log("idx: " + i + " - " + timerContainer.getTimer(idx).visible)
  15. }
  16. currentTimer = timerContainer.getTimer(idx);
  17. currentIndex = idx;
  18. }
  19.  
  20. //function addTimer(timer) {
  21. // timer.parent = circletimercontent1;
  22. // timer.anchors.fill = circletimercontent1;
  23. //}
  24.  
  25. Component.onCompleted: {
  26. for (var i = 0; i < timerContainer.size; ++i)
  27. {
  28. timers.push(timerContainer.getTimer(i));
  29. }
  30.  
  31. timers.selectTimer(0);
  32. timerContainer.addNewTimer.connect(timers.addTimer);
  33.  
  34. }
  35.  
  36. Connections
  37. {
  38. target: currentTimer
  39. }
  40. }

Наткнулся где то на форумах на
var newComponent = Qt.createComponent(arg)
var newObj = newComponent.createObject(arg)
но не уверен может ли это мне помочь.

Буду признателен если тот кто с чем то подобным сталкивался поможет разобратся в этом.

2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 31 декабря 2018 г. 1:58
  • Ответ был помечен как решение.

;-)

  1. for (var i = 0; i < timerContainer.size; ++i)
  2. {
  3. timerContainer.getTimer(i).visible = (i === idx);
  4. }
    BlinCT
    • 31 декабря 2018 г. 2:49

    Да, ошибочка на внимательность)

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь