1

单击列表视图按钮时,我需要推送一个页面。我已经尝试了下面的编码,但它不起作用。

ListItemComponent {
    type: "imageItem"
    Container {
        id: publicimageItem
         ......

         ......

        ImageButton {
            defaultImageSource: "asset:///defaultimg.png"
            pressedImageSource: "asset:///pressedimg.png" 

            onClicked: {
                var new_page = publicimageItem.ListItem.view.nextpage.createObject();
                publicimageItem.ListItem.view.navigationPane.push(new_page);
            }
            attachedObjects: [
                ComponentDefinition {
                    id: nextpage
                    source: "NextPage.qml"
                }
            ]
        }// ImageButton
    }// Container
}// ListView

当我在列表视图之外尝试时,它会毫无问题地进入下一页。

4

2 回答 2

1

使用以下代码将对象存储到全局变量的另一种最简单的方法对我来说很好用。

     onCreationCompleted: {
     Qt.tabbedPane = tabbedPane;
     Qt.homeTab = homeTab;
    }   

在这里,我在页面创建完成时将 tabbedPane 存储在全局变量 Qt.tabbedPane 中。现在我可以使用 Qt.tabbedPane 从 ListItemComponent 访问它。

在您的情况下,将导航窗格存储到 Qt.navigationPane=NavigationId,然后尝试从 ListItemComponent 作为 Qt.navigationPane 访问它。

希望它会有所帮助。

希望能帮助到你。

于 2013-04-02T11:46:46.660 回答
0

建议该路径NextPage.qml和页面本身是有效的并且设置正确,我建议将代码更改为onClicked()以下内容:

var new_page = nextpage.createObject();
navigationPane.push(new_page);

请确保可以在此处访问 navigationPane。如前所述,启用控制台日志记录(或使用终端slog2info实用程序)可能是个好主意。这样你就可以看到你的代码发生了什么以及为什么。

作为另一种变体,如果您想通过与整个列表项(而不是其中的特定小部件)交互来导航到其他页面,则需要将相同的代码放在onTriggered()插槽中:

ListView {
    ListItemComponent {
        type: "imageItem"
        Container {
            id: publicimageItem
             ......
        }// Container
    }// ListItemComponent

    onTriggered: {
        var new_page = nextpage.createObject();
        navigationPane.push(new_page);
    }

    attachedObjects: [
        ComponentDefinition {
            id: nextpage
            source: "NextPage.qml"
        }
    ]    
} // ListView    
于 2013-02-25T00:04:37.433 回答