我使用QtQuick 2.0和QML ListView来显示一些项目,我需要知道用户何时选择其他项目。当用户点击代表中的鼠标区域时发出信号,即
MouseArea{
onClicked: {
controller.itemChanged(model.item);
someList.currentIndex = index;
}
}
但仅当用户使用鼠标选择项目时,如果用户使用箭头键,它就不起作用。
我一直在查看文档以查找currentIndex
更改时发出的信号,但我似乎无法找到任何信号。我正在寻找类似于QListWidget::itemSelectionChanged()
的东西,但似乎QML ListView没有。
答案 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。您可以采取两种方法
signal handler名为on<SignalName>
,信号的第一个字母为大写。