2012-02-06 6 views
1

Я пытаюсь написать приложение запуска с помощью QtQuick \ QML, и я хотел бы, чтобы пользовательский интерфейс был похож на iOS, с точки зрения наличия сетки значков, которые можно переставить с помощью значки, которые «перемещаются в сторону» через анимированные переходы и эффект «привязки к сетке», если значок падает в промежуточном положении. Я попытался использовать GridView и свойства перетаскивания, но я не могу заставить макет делать то, что хочу. Что было бы лучшим способом реализовать этот тип приложения с помощью QML? Я довольно новичок в QtQuick, и я чувствую, что, может быть, мне не хватает чего-то фундаментального, что сделало бы это довольно легко \ очевидным для написания.Панель запуска приложений QML похожа на iOS

+0

Можете ли вы быть более явными в том, что вы уже пробовали? Может быть, показать какой-то код? – blakharaz

ответ

0

Это не имеет прямого отношения к реализации сетки значков, но я недавно столкнулся с компонентом Loader QML. Это позволяет загружать компоненты QML по требованию и может быть полезно для кода, запускающего приложение после выбора значка.

http://doc-snapshot.qt-project.org/5.0/qml-qtquick2-loader.html

0

Я сделал Nokia N9 запущен внешний вид (Maemo 6, или также известный как MeeGo). Это похоже, я просто прокручиваю вверх с помощью значков, а вы меняете «страницы» слева направо (и наоборот).

Я не знаю, это лучший способ, но это, как я сделал менеджер иконок (его усаживается, это только, чтобы дать вам представление - на самом деле это значительно больше):

Item 
{ 
    id: root 

    function getChildAt(x, y) {} 
    function getIndexOfChild(child) {} 
    function moveChild(child, x, y) 
    { 
     //moving around icons 
    } 

    function setIndexToChild(child) 
    { 
     //index of child in Grid element (where to drop) 
    } 

    Flickable 
    { 
     id: scroller 
     clip: true 
     //you most likely want HorizontalFlick ("paging" effect you can add on onBeginingXChanged) 
     flickableDirection: Flickable.VerticalFlick 

     contentHeight: iconTable.height 
     contentWidth: iconTable.width 

     Grid 
     { 
      id: iconTable 

      width: root.width 
      anchors.top: parent.top 
      flow: Grid.LeftToRight 
      spacing: 10 

      add: Transition 
      { 
       NumberAnimation 
       { 
        properties: "x,y" 
        //make desired transition 
       } 
      } 
      move: Transition 
      { 
       NumberAnimation 
       { 
        properties: "x,y" 
        //make desired transition 
       } 
      } 
     } 
    } 
} 

Вы также можете записать свою собственную реализацию менеджера на C++, а затем использовать его в QML.


Вот как это выглядит:

Preview of icon manager

0

я создал что-то отдаленное, связанный с этим в последнее время, идея: создать ListView с защелкиванием. Его делегат должен содержать GridView. Отделите все приложения на n-элементные куски. Тогда (это только идея)

ListModel 
{ 
    ListElement { apps: [app1, app2, ..., appn] } 
    ListElement { apps: [app1, app2, ..., appn] } 
    .... 
    ListElement { apps: [app1, app2, ..., appk] } 
} 

Затем заполнить ListView с этой моделью и GridView с apps собственности. Я не знаю, можете ли вы здесь перетащить, но