从文件夹加载所有 QML
Load all QML's from folder
是否可以将所有 QML 从工作目录子文件夹加载到 SwipeView?这些 QML 的数量是未知的,并且会及时更改(用户可能会添加新的和删除旧的),所以我认为我还需要在单击某些 Button 时重新加载(刷新)SwipeView。所有 QML 都是不同的,因为它们是根据用户提供的信息在 Python 后端创建的(只是模板相同)。
我做了这样的事情:
SwipeView {
id: job_swipe
width: jobwindow.width/2
height: jobwindow.height/2
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
orientation: Qt.Vertical
Component.onCompleted:
function load_jobs() {
jobsignals.jobs_to_qmls_slot()
var i
var fn
var fc = (jobsignals.filecount)
for (i = 0; i<fc; i++) {
fn = "jobs/job" + i + ".qml";
job_swipe.addPage(job_swipe.createPage(fn))
}
//job_swipe.currentIndex = (fc-1)
}
function addPage(page) {
addItem(page)
page.visible = true
}
function createPage(jobfile){
var component = Qt.createComponent(jobfile);
var page = component.createObject(job_swipe);
return page
}
function removePage(page) {
removeItem(page)
page.visible = false
}
}
但是删除页面并没有像我想要的那样工作 - 它在视觉上删除了页面,但对象仍然存在,所以当我想添加新页面时,它首先创建我已经删除的页面
我会使用 FolderListModel 生成一个文件夹中的 .qml 文件列表。然后你可以用加载器加载它们。
SwipeView {
Repeater {
model: FolderListModel {
id: folderModel
folder: // Whatever folder you want to search
nameFilters: ["*.qml"]
}
Loader {
source: fileUrl
}
}
}
编辑:
要刷新数据,很遗憾,我在 FolderListModel 中没有看到用于执行此操作的内置方法。但是您应该能够重置文件夹值(以一种丑陋的方式),如下所示:
Button {
text: "Refresh"
onClicked: {
var currentFolder = folderModel.folder
folderModel.folder = "" // First clear the folder
folderModel.folder = currentFolder; // Then set the folder again
}
}
是否可以将所有 QML 从工作目录子文件夹加载到 SwipeView?这些 QML 的数量是未知的,并且会及时更改(用户可能会添加新的和删除旧的),所以我认为我还需要在单击某些 Button 时重新加载(刷新)SwipeView。所有 QML 都是不同的,因为它们是根据用户提供的信息在 Python 后端创建的(只是模板相同)。
我做了这样的事情:
SwipeView {
id: job_swipe
width: jobwindow.width/2
height: jobwindow.height/2
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
orientation: Qt.Vertical
Component.onCompleted:
function load_jobs() {
jobsignals.jobs_to_qmls_slot()
var i
var fn
var fc = (jobsignals.filecount)
for (i = 0; i<fc; i++) {
fn = "jobs/job" + i + ".qml";
job_swipe.addPage(job_swipe.createPage(fn))
}
//job_swipe.currentIndex = (fc-1)
}
function addPage(page) {
addItem(page)
page.visible = true
}
function createPage(jobfile){
var component = Qt.createComponent(jobfile);
var page = component.createObject(job_swipe);
return page
}
function removePage(page) {
removeItem(page)
page.visible = false
}
}
但是删除页面并没有像我想要的那样工作 - 它在视觉上删除了页面,但对象仍然存在,所以当我想添加新页面时,它首先创建我已经删除的页面
我会使用 FolderListModel 生成一个文件夹中的 .qml 文件列表。然后你可以用加载器加载它们。
SwipeView {
Repeater {
model: FolderListModel {
id: folderModel
folder: // Whatever folder you want to search
nameFilters: ["*.qml"]
}
Loader {
source: fileUrl
}
}
}
编辑:
要刷新数据,很遗憾,我在 FolderListModel 中没有看到用于执行此操作的内置方法。但是您应该能够重置文件夹值(以一种丑陋的方式),如下所示:
Button {
text: "Refresh"
onClicked: {
var currentFolder = folderModel.folder
folderModel.folder = "" // First clear the folder
folderModel.folder = currentFolder; // Then set the folder again
}
}