如何知道QML QListView中所选项目的更改时间?

时间:2014-04-06 23:16:07

标签: qt listview qml pyqt5 qlistview

我使用QtQuick 2.0和QML ListView来显示一些项目,我需要知道用户何时选择其他项目。当用户点击代表中的鼠标区域时发出信号,即

MouseArea{
    onClicked: {
                 controller.itemChanged(model.item);
                 someList.currentIndex = index;
   }
}

但仅当用户使用鼠标选择项目时,如果用户使用箭头键,它就不起作用。

我一直在查看文档以查找currentIndex更改时发出的信号,但我似乎无法找到任何信号。我正在寻找类似于QListWidget::itemSelectionChanged()的东西,但似乎QML ListView没有。

3 个答案:

答案 0 :(得分:2)

您需要<button value="1" class="_42ft _4jy0 _n6m _4jy3 _517h _51sy" data-hover="tooltip" aria-label="Start a video call with Tsiato" type="submit" id="js_rk"><i class="_e0b img sp_qk8sNUxukfD sx_4816f8"></i></button> 中的try { HtmlElementCollection buttons = pinger.Document.GetElementsByTagName("button"); foreach (HtmlElement curElement in buttons) { if (curElement.GetAttribute("classname").ToString() == "_42ft _4jy0 _n6m _4jy3 _517h _51sy") { if (curElement.GetAttribute("aria-label").ToString().Contains("Start a video call")) { label5.Text = "online"; } } } } catch (NullReferenceException b) { Console.WriteLine(b.ToString()); }

答案 1 :(得分:0)

我最终不得不重新实现键盘行为并从代理中公开模型数据,以便在按下某个键时触发信号。

ListView {
    id: myList
    focus: true
    orientation: "Horizontal" //This is a horizontal list
    signal itemChanged(var item)
    interactive: false //Disable interactive so we can re-implement key behaviour
    Keys.onPressed: {
                if (event.key == Qt.Key_Left){
                    myList.decrementCurrentIndex(); //Change the current list selection
                    itemChanged(myList.currentItem.selectedItem.data); //Fire signal notifying that the selectedItem has changed
                }
                else if (event.key == Qt.Key_Right){
                    myList.incrementCurrentIndex(); //Change the current list selection
                    itemChanged(myList.currentItem.selectedItem.data); //Fire signal notifying that the selectedItem has changed
                }
            }

    delegate: Component {
        Rectangle {
            id: myItem
            property variant selectedItem: model //expose the model object

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    myList.currentIndex = index; //Change the current selected item to the clicked item
                    itemChanged(model.data); //Fire signal notifying that the selectedItem has changed
                }
            }
        }
    }
}

使用此解决方案,只要用户单击某个项目或按下某个键,您就必须手动更改QML中的项目。我不确定这是GridView的最佳解决方案,但它适用于ListView

答案 2 :(得分:0)

this question。您可以采取两种方法

  1. Connect到另一个组件的活动
  2. Handle该组件中的事件
  3. signal handler名为on<SignalName>,信号的第一个字母为大写。