Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Widget opisany za pomocą qml nie widzi rodzica
Forum Updated to NodeBB v4.3 + New Features

Widget opisany za pomocą qml nie widzi rodzica

Scheduled Pinned Locked Moved Solved Polish
qml parentwidget
2 Posts 2 Posters 1.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Montjet
    wrote on last edited by Montjet
    #1

    #edit
    Po stronie C++ ustawiłem rozciagani Widget'a.
    Jakoś to wygląda, chociaż wolałbym kontrolować to QML'em.

    Cześć!
    Po stronie C++ stworzyłem wrapper okienka.
    CentralWidget jest opisany za pomocą QML, który niestety nie widzi swojego rodzica (null).
    Rodzic jest mi potrzebny w celu pobrania jego szerokości i wysokości (chcę aby wypełniał całe okienko)

    Kod:

    MainWindow::MainWindow(
                QUrl workspaceQmlSource
            ):
                m_engine(new QQmlEngine(this)),
                m_workspaceWidget(new QQuickWidget(m_engine, this))
            {
                auto layout = new QVBoxLayout();
                layout->setAlignment(Qt::AlignTop);
                layout->setSpacing(0);
                layout->setMargin(0);
    
                m_workspaceWidget->setSource(workspaceQmlSource);
                layout->addWidget(m_workspaceWidget);
    
                auto centralWidget = new QWidget(this);
                centralWidget->setObjectName("centralWidget");
                centralWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
                centralWidget->setLayout(layout);
                centralWidget->setContentsMargins(0, 0, 0, 0);
                setCentralWidget(centralWidget);
            }
    

    Qml:

    import QtQuick 2.7
    import QtQuick.Window 2.3
    
    Rectangle
    {
        id: workspace
        //anchors.fill: parent
        width: 300
        height: Screen.height / 1.2
        /*minimumWidth: Screen.width / 1.3
        minimumHeight: Screen.height / 1.3*/
        visible: true
        color: "red"
    
        Component.onCompleted:
        {
            console.log("parent: " + parent);
        }
    }
    

    Output konsoli:

    qml: parent: null
    

    Są 2 widgety, gdyż pojawi się później jeszcze jeden równoległy do workspaceWidget widget opisujący titleBar.
    Mógłbym wysłać do qml cały obiekt MainWindow i pobrać dane za pomocą Q_PROPERTY, jednak to rozwiązanie wydaje mi się dosyć słabe.
    Jak to poprawić?

    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Twój Rectangle jest root objektem w strukturze QMLa, więc nie ma rodzica - to normalne.

      Albo użyj QMLa do całego swojego GUI, albo dodaj objekty, których potrzebujesz do contextProperty w silniku QML.

      (Z(:^

      1 Reply Last reply
      2

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved