2017-01-05 4 views
1

Насколько я понимаю, нет встроенных функций для закрепляемых контейнеров в QtQuick. Я нашел несколько источников, где это добавлено, однако у меня возникли проблемы с решением вопроса о том, куда идти.Стыковка в QtQuick

https://developer.blackberry.com/native/documentation/dev/custom_components/index.html

How to get a QMainWindow from ApplicationWindow QML file to allow use of QDockWidget with QML files

Может кто-то порекомендовать путь (или, предпочтительно, библиотека), чтобы добавить стыковку к QtQuick?

+1

Там нет ничего на некоторое время, однако это не так уж трудно DIY. – dtech

+0

Я думаю, что «не так сложно» находится в глазах смотрящего, поскольку я довольно новичок в этом. У вас есть указатель, как это реализовать? Является ли reparenting в новом окне возможным способом реализации «незакрепленного» состояния? –

+1

Да, если вы готовы пойти на несколько окон. Вы также можете иметь плавающий элемент в текущем окне. – dtech

ответ

2

Я нашел решение, которое работает с несколькими окнами, перемещая виджет из главного окна (пристыкованное состояние) в новое окно (состояние отстыкованного состояния).

Надеясь, что это полезно для других здесь полный пример:

import QtQuick 2.7 
import QtQuick.Controls 2.0 
import QtQuick.Layouts 1.0 
import QtQuick.Window 2.2 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    Window { 
     width: 100; 
     height: 100; 
     visible: false; 
     id: wnd 

     Rectangle { 
      id: greenRect 
      anchors.fill: parent 
     } 

     onClosing: { 
      blueRect.state = "docked" 
     } 

    } 

    Item { 
     width: 200; height: 100 

     Rectangle { 
      id: redRect 
      anchors.fill: parent 
     } 

     Rectangle { 
      id: blueRect 
      width: 50; height: 50 
      x: 10; y: 10; 
      color: "blue" 

      states: [ 
       State { 
        name: "undocked" 
        ParentChange { target: blueRect; parent: greenRect; x: 10; y: 10 } 
       }, 
       State { 
        name: "docked" 
        ParentChange { target: blueRect; parent: redRect; x: 10; y: 10 } 
       } 
      ] 

      MouseArea { 
       anchors.fill: parent; 
       onClicked: { 
        blueRect.state = "undocked" 
        wnd.visible = true 
       } 
      } 
     } 
    } 
} 
Смежные вопросы