2015-02-12 4 views
0

Я хочу показать TextField в нижней части экрана в QML для SailfishOS.Как отобразить TextField в нижней части экрана

Я попытался выполнить несколько попыток, но TextField всегда находится в верхней части экрана.

import QtQuick 2.0 
import Sailfish.Silica 1.0 

ApplicationWindow { 
    id: screen 
    anchors.fill: parent 
    Item { 
     width: parent.width; 
     anchors.bottom: screen.bottom 
     TextField { 
      width: parent.width; 
      anchors.bottom: screen.bottom 
      id: input 
      placeholderText: "URL" 
      inputMethodHints: Qt.ImhNoPredictiveText 
      validator: RegExpValidator { regExp: /^[a-zA-Z]{3,}$/ } 
     } 
    } 
} 

ответ

0

Kaymaz, в общем, ваш вопрос не связан с SailfishOS. И вы были почти правы, но сделали несколько ошибок в вашем коде. Вы можете использовать этот код:

// Its desktop version, and everyone can run it. It will be easy 
// to insert correct includes for SailfishOS 
import QtQuick 2.3 
import QtQuick.Controls 1.2 
import QtQuick.Window 2.2 

ApplicationWindow { 
    id: appWindow 

    // Explicitly set window size (just for testing on desktop) 
    width: 200 
    height: 400 

    // Item that represents "main application rectangle" 
    // it will contain all child items 
    Item { 
     id: root 
     anchors.fill: parent 

     TextField { 
      id: input 
      anchors { 
       left: parent.left 
       right: parent.right 
       bottom: root.bottom 
      } 
      placeholderText: "URL" 
      inputMethodHints: Qt.ImhNoPredictiveText 
      validator: RegExpValidator { regExp: /^[a-zA-Z]{3,}$/ } 
     } 
    } 
} 

Я не рекомендую использовать folibis подход «s по нескольким причинам:

  • Если вы можете использовать anchor с в QML - используйте его.
  • Избегайте неназванных констант (например, 30).
  • Такой код становится трудно читаемым (я имею в виду, если это более 20 строк).
  • Представьте, что изменение вашей высоты TextField - вам нужно будет изменить y: screen.height - 30. Таким образом, этот вид кода трудно поддерживать.
  • Не пишите код мышления «Я могу улучшить это позже». Напишите хороший код.
+0

Не нужно изобретать велосипед, если вы можете просто ходить. Или, в соответствии с бритвой Оккама - чем меньше сделанных предположений, тем лучше. Вы вставляете дополнительный 'Item', чтобы эта конструкция стала полностью не смысловой. Что касается моего решения - вы можете изменить его на 'y: screen.height - height', и поэтому все, что вам может понадобиться изменить здесь, это' height'. – folibis

+0

Я также обновил свой ответ. Если вы говорите, что это трудно читать ... хм, мне просто нечего спорить. – folibis

+0

@troyane Работает, как и ожидалось, спасибо. Но у меня есть немного больше строк, и я не могу заставить его работать ... Можете ли вы посмотреть, пожалуйста? http://pastebin.com/xKzFLEFu – Kaymaz

-2

Попробуйте это:

ApplicationWindow { 
    id: screen 
    width: 400 
    height: 300 

    TextField { 
     width: screen.width 
     y: screen.height - height 
     placeholderText: "URL" 
    } 
} 
+0

Я нашел это в то же время ... странный материал! Надеюсь, он должен работать с пейзажем. Одна маленькая вещь: я использую'anchors.fill: parent ', поэтому требуется весь экран – Kaymaz

+2

Он также работал бы с привязкой ... это был внешний 'Item' для генерации визуальной ошибки ... всегда предпочитают привязывать к абсолютное позиционирование. – BaCaRoZzo

+0

Не понимаю ... – Kaymaz

Смежные вопросы