2015-07-04 95 views
2

我試圖創建自定義文本字段使用TextInput元素(我需要它使用驗證和自定義樣式)。但我無法隱藏TextInput內容的部分擴展(見圖片)。我有類似的問題與其他元素,而它有根項目(容器)什麼包含其他項目,兒童可以看出,如果他們被放置在容器座標。如果他們不在根容器中,我如何隱藏兒童部分?自定義文本編輯,如何隱藏TextInput,當它變寬

有代碼,但它實際上只是模板,我試圖üz屬性,沒有成功。

BreezeQuickLineInput.qml

import QtQuick 2.4 

Item { 
    id: root 
    property int fontSize: 18 
    property BreezeQuickPalette palette: BreezeQuickPalette 
    property string text: "Type here..." 
    implicitHeight: input.font.pixelSize*2 
    implicitWidth: 196 
    Rectangle{ 
     id: body 
     color: "transparent" 
     anchors.fill: parent 
     border { 
      color: palette.plasmaBlue 
      width: 1 
     } 
     TextInput{ 
      id: input 
      anchors { 
       fill: parent 
      } 
      font.pointSize: fontSize 
      color: palette.normalText 
      selectByMouse: true 
     } 
    } 
} 

知道的任何幫助。我已經檢查了TextInput文檔,但是如果您知道我應該學習什麼主題,請告訴我。

enter image description here

+0

爲什麼你設定明確'implicitWidth'和'implicitHeight'? – skypjack

+0

你是什麼意思?我應該如何設置?我需要預定義的小部件大小,一旦它放在我的'ApplicationWindow'上。如果我設置了「寬度」和「高度」,這種行爲沒有區別。 – user3417815

+0

如果您希望一般情況下使用起來更容易一些,您應該查看QtQuick控件中的[TextField](http://doc.qt.io/qt-5/qml-qtquick-controls-textfield.html)。 – MrEricSir

回答

2

好,發現layer屬性組時,真的不知道。我剛打開layer.enabled,我的目標已經完成。 Qt文檔中缺少一些信息。不幸的是,之前並不知道layer組的目的。

BreezeQuickLineInput.qml

import QtQuick 2.4 

Item { 
    id: root 
    property int fontSize: 18 
    property BreezeQuickPalette palette: BreezeQuickPalette 
    property string text: "Type here..." 
    implicitHeight: input.font.pixelSize*2 
    implicitWidth: 196 
    Rectangle{ 
     id: body 
     color: "transparent" 
     anchors.fill: parent 
     border { 
      color: palette.plasmaBlue 
      width: 1 
     } 
     TextInput{ 
      id: input 
      anchors { 
       fill: parent 
      } 
      font.pointSize: fontSize 
      color: palette.normalText 
      selectByMouse: true 
      layer.enabled: true 
     } 
    } 
} 

enter image description here

UPDATE:

我的壞,QT做生意好。我的回答是在Item的描述。從Qt的文檔:

項目圖層

的項目一般會呈現直接進入其所屬的窗口。 >但是,通過設置layer.enabled,可以將項目和>整個子樹委託到屏幕外表面。只有屏幕外表面a>紋理將被繪製到窗口中。

UPDATE:

通過BaCaRoZzo評論使用的Itemclip屬性以下是更便宜。

夾:布爾

這個屬性保存剪裁是否啓用。默認剪輯值爲false。

如果啓用了裁切,則項目會將其自己的繪畫以及其子項的繪畫剪裁到其邊界矩形。

所以,我只是把它留在那裏,相信它可以幫助其他同樣的問題。

+2

不用,正確的答案是添加['clip'](http://doc.qt.io/qt-5/qml-qtquick-item.html#clip-道具)':true'到'root'。默認情況下,裁剪是錯誤的,因此繪畫克服父邊界,就像你經歷的那樣。使用'Layers'是有效的,但它更昂貴。 – BaCaRoZzo

+1

是的,我試着將'clip:true'添加到'input'並且它也可以工作。無論如何,我只是在查看元素文檔而不是檢查「Item」類型成員時出錯了。感謝您的評論。 – user3417815

0

只需添加 夾:真 文本里面輸入

相關問題