获取当前显示的委托的索引 - QML ListView

时间:2014-08-06 14:24:19

标签: qt list listview qml

我创建了一个ListView,它显示了用户定义的几页内容(纯文本)。显示的页面是委托。一次只能看到一个页面。我决定使用它来捕捉一个项目,就像iOS'发射器工作。用户只需在页面之间轻弹即可。 (这将用于触摸屏)

我需要获取当前显示页面的索引以进行某些操作。 ListView的currentIndex总是保持== 0.我怎么能得到它?

对于喜欢代码的人:

 ListView
 {
      onCurrentIndexChanged: console.log(currentIndex) // this gets called only once - at startup
      delegate: Column
      {
           // The page displayed, only one page at a time
      }
 }

由于

3 个答案:

答案 0 :(得分:12)

有很多方法可以获取屏幕中显示的当前项目的索引。如果您可以获取当前页面的x-y坐标,则可以在ListView中使用indexAt方法。

在每个委托中,您可以在委托范围内使用index角色找到索引。 index就像您在模型中声明的角色,由ListView自动分配。例如,

ListView 
{
    delegate: Column
    {
        property int indexOfThisDelegate: index
        //...
    }
}

引入index角色here

  

委托也可以使用包含模型中项目索引的特殊索引角色。请注意,如果从模型中删除项目,则此索引设置为-1

另一种方法是显式地为ListView中的currentItem属性赋值,因此视图可以自行滚动。这是Qt文档中的一个简单example,与您的应用程序类似。

答案 1 :(得分:1)

我知道这已经很老了,但我遇到了同样的问题,并花了一些时间试图找到一种方法来获取对我有用的 currentIndex 。在我的情况下,我需要更改 ListView 的宽度,所以我每次都必须重新计算 currentIndex

但后来我找到了highlightRangeMode属性。当它设置为ListView.StrictlyEnforceRange时, currentIndex 将始终自动更新,并包含当前可见项目的正确索引。

ListView {
    highlightRangeMode: ListView.StrictlyEnforceRange 
    // ...
}

答案 2 :(得分:0)

你可以这样做:

    if (isset($_GET['name']) && !is_empty($_GET['name'])) 
    {

    $kname = mysql_escape_string($_GET['name']);

    $query = "SELECT name, wins, losses, otl, pts, gf, ga FROM standings2014_2015 WHERE name=".$kname.";";
    $result = $db->query($query);

    if ($result) 
    {  echo "<table class='table sortable'>";  
       foreach ($result as $row) 
       {
         $tr .= '
           <tr>
             <td>'.$name.'</td>
             <td>'.$wins.'</td>
             <td>'.$losses.'</td>
             <td>'.$otl.'</td>
             <td>'.$pts.'</td>
             <td>'.$gf.'</td>
             <td>'.$ga.'</td>
           </tr>
           ';
         echo $tr;

       }
       echo "</table>";  
    }

   }else{ 
     //YOUR ACTUAL CODE
   }