在双窗格的文件管理器的context,我有两个并列的TabView
项目方面,均含有当然的多个选项卡,并显示的内容各Tab
加载一个TableView
具体目录使用FolderListModel
。获取活动标签和更改项目性质
SplitView
TabView
Tab
Tab
TabView
Tab
我现在的任务就是实现一个工具栏按钮来切换在活跃标签所示的FolderListModel
实例的showHidden
财产。因此,我需要一种方法来查明当前活动选项卡是什么。
接下来,一旦我得到有效Tab
,我需要改变Tab.item.some_property
,特别感兴趣的性质是show_hidden
,这是一个别名底层FolderListModel
的showHidden
财产。例如,一个硬编码的情况是:
ToolButton {
onClicked: {
tab1.item.show_hidden = false;
tab1.destroy(); // need "refresh" instead
}
}
首先,我需要根据它是否处于活动状态得到tab1
,和第二,我改变show_hidden
后,认为自身不刷新,所以我需要调用某种重载功能,但是哪一个?或者重新加载不是最好的办法吗?是否可以使用自定义信号处理程序来完成? (同样我只能认为在概念上不知道如何实现它。)
至于建议我张贴下面运行的例子:
/* main.qml */
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
ApplicationWindow {
visible: true
width: 1280
height: 700
toolBar: ToolBar {
RowLayout {
anchors.fill: parent
ToolButton {
onClicked: { // TODO toggle folderModel.showHidden property
tab1A.item.show_hidden = false;
// tab1A.destroy(); // fixme how to refresh the view?
}
}
}
}
Item {
anchors.fill: parent
SplitView {
id: splitView
anchors.fill: parent
TabView {
id: tabView1
width: splitView.width/2
Tab {
id: tab1A
title: qsTr("Home")
source: "dirview.qml"
onLoaded: {
item.folder_url = "file:///tmp";
}
}
Tab {
title: qsTr("Folder")
source: "dirview.qml"
onLoaded: {
item.folder_url = "file:///home";
}
}
}
TabView {
id: tabView2
Tab {
title: qsTr("Home")
source: "dirview.qml"
onLoaded: {
item.folder_url = "file:///home";
}
}
}
}
}
}
/* dirview.qml */
import QtQuick 2.4
import QtQuick.Controls 1.4
import Qt.labs.folderlistmodel 2.1
TableView {
property alias folder_url: folderModel.folder
property alias show_hidden: folderModel.showHidden
id: tableView
anchors.fill: parent
TableViewColumn {
role: "fileName"
title: qsTr("Name")
width: tableView.width * 0.7
}
TableViewColumn {
role: "fileSize"
title: qsTr("Size")
width: tableView.width * 0.2
}
FolderListModel {
id: folderModel
nameFilters: ["*"]
showHidden: true
showDirsFirst: true
showDotAndDotDot: true
}
model: folderModel
}
谢谢。
发现了一些奇怪的:Tab.item.folder_url
有正确的信息,但是,Tab.item.show_hidden
总是false
,即使我删除,我手动将它设置为false
行。这很难理解,因为我最初在dirview.qml
中设置了FolderListModel.showHidden
到true
。
ToolButton {
onClicked: { // TODO toggle folderModel.showHidden property
var cur_tab_idx = tabView1.currentIndex;
console.log(tabView1.getTab(cur_tab_idx).item.folder_url);
console.log(tabView1.getTab(cur_tab_idx).item.show_hidden);
}
}
我想你必须提供一个最小的运行示例。与*一个* TabView'的东西,以便我们可以看到什么不是“刷新”。第一个问题的答案是:http://doc.qt.io/qt-5/qml-qtquick-controls-tabview.html#currentIndex-prop – Mitch
@Mitch感谢您关于活动选项卡的提示。但是我意识到,由于工具栏按钮由两个“窗格”(“TabView”)共享,因此在获取活动选项卡之前,我需要知道哪个窗格处于活动状态,在“SplitView”下。我没有看到后者提供任何方法来找出哪些孩子是活跃的? – treslumen
我不明白。你只有'SplitView'中的一个孩子.. – Mitch