Qt 如何在最近打开的文件菜单中添加文件名
我想编写一个QML应用程序,将Qt 如何在最近打开的文件菜单中添加文件名,qt,qml,qtquick2,Qt,Qml,Qtquick2,我想编写一个QML应用程序,将FileDialog中最新打开的文件添加到主菜单中。我目前正在遵循文档示例,但问题是我无法理解如何传递已打开文件的文件名 import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Dialogs 1.0 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Hello World")
FileDialog
中最新打开的文件添加到主菜单中。我目前正在遵循文档示例,但问题是我无法理解如何传递已打开文件的文件名
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
menuBar : MenuBar
{
Menu
{
id: recentFilesMenu
Instantiator
{
model: recentFilesMenu
MenuItem
{
text: model.fileName // I neeed to pass name of opned file here
}
onObjectAdded: recentFilesMenu.insertItem(index, object)
}
title: "File"
MenuItem
{
text: "Open"
onTriggered: fileDialog.visible = true
}
MenuItem
{
text: "Exit"
}
}
}
FileDialog
{
id: fileDialog
title: "Oooopen"
onAccepted:
{
// Here is problem
recentFilesMenu.objectName = fileDialog.fileUrls
}
}
}
此类功能有一个小部件版本: 但描述帮助是不存在的。查看此处的代码: 您将看到,它在QSettings中存储了最近文件列表的QStringList,并将所有内容加载到qaction数组中 通过mainWindow.cpp查看对的所有引用
enum { MaxRecentFiles = 5 };
QAction *recentFileActs[MaxRecentFiles];
对于如何在QML中执行类似的操作,您应该有一些好的想法
<>希望帮助。< P>根据文档,接受最常见的模型类型——C++和QML。在文档示例中,缺少此类信息,可能是为了不强制使用特定信息。实际的实现可以依赖于
ListModel
。在这种情况下,模型将公开用作实际菜单项的文件名角色
按照这种方法,结果类似于下面的代码。请注意,url
s前面有可以轻松删除的信息(例如,请参阅)
导入QtQuick 2.3
导入QtQuick.Controls 1.2
导入QtQuick.Dialogs 1.0
应用程序窗口{
可见:正确
宽度:640
身高:480
标题:qsTr(“你好世界”)
菜单栏:菜单栏{
菜单{
id:recentFilesMenu
标题:“文件”
梅努伊特姆{
正文:“打开”
onTriggered:fileDialog.visible=true
}
菜单分隔符{}
实例化器{
模型:ListModel{id:files}
MenuItem{text:fileName}
onObjectAdded:recentFilesMenu.insertItem(索引,对象)
onObjectRemoved:recentFilesMenu.removeItem(对象)
}
MenuSeparator{visible:files.count>0}
MenuItem{text:“退出”}
}
}
文件对话框{
id:fileDialog
标题:“公开”
不接受:{
对于(var i=0;i
您可能有有限数量的最新文件要显示。也就是说,你可以实现X个数,并将文本设置为在C++类中实现为A的QSTRIGLIST[I]。然后,您可以在C++类上操作QSTRIGLIST元素(大小,顺序)。我用一个组件执行这个操作,执行createObject并将该对象添加到我正在使用的菜单中。使用实例化器是一个更干净的过程。
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
menuBar : MenuBar {
Menu {
id: recentFilesMenu
title: "File"
MenuItem {
text: "Open"
onTriggered: fileDialog.visible = true
}
MenuSeparator { }
Instantiator {
model: ListModel { id: files }
MenuItem { text: fileName }
onObjectAdded: recentFilesMenu.insertItem(index, object)
onObjectRemoved: recentFilesMenu.removeItem(object)
}
MenuSeparator { visible: files.count > 0 }
MenuItem { text: "Exit" }
}
}
FileDialog {
id: fileDialog
title: "Open"
onAccepted: {
for(var i = 0; i < fileDialog.fileUrls.length; ++i)
files.append({fileName: fileDialog.fileUrls[i]})
}
}
}