在雙窗格的文件管理器的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