Я пытаюсь написать приложение запуска с помощью QtQuick \ QML, и я хотел бы, чтобы пользовательский интерфейс был похож на iOS, с точки зрения наличия сетки значков, которые можно переставить с помощью значки, которые «перемещаются в сторону» через анимированные переходы и эффект «привязки к сетке», если значок падает в промежуточном положении. Я попытался использовать GridView и свойства перетаскивания, но я не могу заставить макет делать то, что хочу. Что было бы лучшим способом реализовать этот тип приложения с помощью QML? Я довольно новичок в QtQuick, и я чувствую, что, может быть, мне не хватает чего-то фундаментального, что сделало бы это довольно легко \ очевидным для написания.Панель запуска приложений QML похожа на iOS
ответ
Для ввода иконки в сетке, вы можете использовать вид сетки: http://developer.qt.nokia.com/doc/qt-4.8/qml-gridview.html
Перейти через Quick документации Qt, вы узнаете, как сделать это.
Это не имеет прямого отношения к реализации сетки значков, но я недавно столкнулся с компонентом Loader QML. Это позволяет загружать компоненты QML по требованию и может быть полезно для кода, запускающего приложение после выбора значка.
http://doc-snapshot.qt-project.org/5.0/qml-qtquick2-loader.html
Я сделал 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.
Вот как это выглядит:
я создал что-то отдаленное, связанный с этим в последнее время, идея: создать ListView с защелкиванием. Его делегат должен содержать GridView. Отделите все приложения на n-элементные куски. Тогда (это только идея)
ListModel
{
ListElement { apps: [app1, app2, ..., appn] }
ListElement { apps: [app1, app2, ..., appn] }
....
ListElement { apps: [app1, app2, ..., appk] }
}
Затем заполнить ListView с этой моделью и GridView с apps
собственности. Я не знаю, можете ли вы здесь перетащить, но
Можете ли вы быть более явными в том, что вы уже пробовали? Может быть, показать какой-то код? – blakharaz