2015-11-07 78 views
1

我想向我的QML應用程序添加一個網格,該網格的行和列可以在運行時調整大小。Qt具有可調整大小的行和列的QML網格

認爲excel表。我可以通過向上和向下拖動頂部/底部邊框來調整整行的大小。我可以左右拖動左右邊框來調整整個列的大小。這與具有水平和垂直方向的SplitView類似。

我一直在搜索一個答案,但繼續得到的結果不是我所期待的。

任何想法?

回答

1

一個GridView總是固定單元大小。你應該嘗試使用TableView

+0

非常感謝。這正是我正在尋找的。問題是我正在使用Qt Creator Designer,出於某種原因,這個類沒有出現在QML類型中。我有QtQuick.Controls 1.4導入,但這仍然不會出現。是否可以使用拖放式界面來創建這些界面? – user1697999

+0

很高興我能幫到你。我不知道設計師,我從來沒有使用過。我認爲你應該自己編寫代碼。如果你需要幫助,你可以回到我身邊。 – Teimpz

1

這裏沒有什麼可做的。只需使用QML綁定和錨定來實現這一點。

import QtQuick 2.0 

Item { 
    width: 500; height: 500 

    GridView { 
     id: gridView 
     width: 300; height: 200 
     cellWidth: 80; cellHeight: 80 

     Component { 
      id: contactsDelegate 
      Text { 
       id: contactInfo 
       text: modelData 
      } 
     } 

     model: 5 
     delegate: contactsDelegate 
    } 

    Rectangle { 
     id: add 
     width: 100 
     height: 20 
     border.color: "red" 
     anchors { 
      top: parent.top 
      topMargin: 10 
      right: parent.right 
      rightMargin: 5 
     } 
     Text { 
      anchors.fill: parent 
      text: "Add Item" 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: gridView.model++ 
     } 
    } 

    Rectangle { 
     id: newWidth 
     width: 100 
     height: 20 
     border.color: "red" 
     anchors { 
      top: add.bottom 
      topMargin: 10 
      right: parent.right 
      rightMargin: 5 
     } 
     Text { 
      anchors.fill: parent 
      text: "New Width" 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: gridView.width += 100 
     } 
    } 

    Rectangle { 
     width: 100 
     height: 20 
     border.color: "red" 
     anchors { 
      top: newWidth.bottom 
      topMargin: 10 
      right: parent.right 
      rightMargin: 5 
     } 
     Text { 
      anchors.fill: parent 
      text: "New Height" 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: gridView.height += 100 
     } 
    } 

} 

或者,如果你想GridViewwidthheight通過調整窗口來改變,這樣做如下:

import QtQuick 2.0 

Item { 
    width: 500; height: 500 

    GridView { 
     id: gridView 
     anchors { 
      top: parent.top 
      left: parent.left 
      right: parent.right 
      bottom: parent.bottom 
      bottomMargin: 35 
     } 
     clip: true 
     cellWidth: 80; cellHeight: 80 

     Component { 
      id: contactsDelegate 
      Text { 
       id: contactInfo 
       text: modelData 
      } 
     } 

     model: 5 
     delegate: contactsDelegate 
    } 

    Rectangle { 
     id: add 
     width: 100 
     height: 20 
     border.color: "red" 
     anchors { 
      bottom: parent.bottom 
      bottomMargin: 10 
      horizontalCenter: parent.horizontalCenter 
     } 
     Text { 
      anchors.fill: parent 
      text: "Add Item" 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: gridView.model++ 
     } 
    } 
}