BlinCT
Dec. 30, 2018, 7:22 p.m.

Динамическое создание обьекта и добавление в 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

Do you like it? Share on social networks!

2
Evgenii Legotckoi
  • Dec. 31, 2018, 1:58 a.m.
  • The answer was marked as a solution.

;-)

  1. for (var i = 0; i < timerContainer.size; ++i)
  2. {
  3. timerContainer.getTimer(i).visible = (i === idx);
  4. }
    BlinCT
    • Dec. 31, 2018, 2:49 a.m.

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

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup