qml实现读写一个ini配置文件,实现如何保存上次关闭软件时的大小和位置

2 篇文章 0 订阅

我们知道大部分软件关闭之后再次打开一般是会恢复上一次关闭的之前的大小和位置,所以我们自己用qml开发一个软件项目的时候应该也要按照大部分软件再次打开时会恢复上一次关闭的之前的大小和位置。所以我们自己读写一个ini配置文件来保存关闭该软件时的位置和大小。

写ini配置文件函数代码如下:

void Configure::write(QString str, QString titleName)
{
    QSettings setFile(QCoreApplication::applicationDirPath()+ "/Data/setting/size.ini",QSettings::IniFormat); 

    if (str.contains("."))
    {
        int lastIndex = str.lastIndexOf("/");
        str = str.left(lastIndex);
    }
        setFile.setValue(titleName, str);
}

读函数如下:

QString Configure::Read(QString titleName)
{
 QSettings setFile(QCoreApplication::applicationDirPath()+ "/Data/setting/size.ini",QSettings::IniFormat);

 QString strFile = setFile.value(titleName).toString();

 return strFile;
}

main.qml中代码如下:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3

ApplicationWindow {
    id: mainWindow
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    //这里 Component.onDestruction关闭项目
    Component.onDestruction: {
        Configureini.write(mainWindow.height, "height");
        Configureini.write(mainWindow.width, "width");
        Configureini.write(mainWindow.x, "x");
        Configureini.write(mainWindow.y, "y");
    }
    
    //这里是初始化项目
    Component.onCompleted: {
        mainWindow.height =  Configureini.read("height");
        mainWindow.width =  Configureini.read("width");
        mainWindow.x =  Configureini.read("x");
        mainWindow.y =  Configureini.read("y");
   }

}

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的使用QML实现文件树控件的示例,它可以列出指定目录下的所有文件和目录,并且支持展开/折叠和双击打开文件的功能。注意,这个示例只是一个基础的实现,你可以根据自己的需求进行扩展和优化。 首先,我们需要定义一个TreeView作为文件树控件的基础,并设置一个自定义的TreeViewDelegate来显示每个节点。在TreeViewDelegate中,我们使用一个RowLayout来显示节点的图标和名称,并通过一个递归调用来显示子节点。具体的代码如下: ``` import QtQuick.Controls 2.4 TreeView { id: fileTreeView anchors.fill: parent model: fileModel delegate: TreeViewDelegate { id: fileTreeDelegate text: model.fileName icon: model.icon RowLayout { spacing: 5 Image { source: icon width: 16 height: 16 } Label { text: text font.bold: model.isDir } } branchDelegate: TreeViewBranchDelegate {} } Component.onCompleted: { // 初始化根目录 var root = { fileName: "Root", filePath: "", isDir: true, children: [] } fileModel.append(root) // 列出根目录下的所有文件和目录 listFiles(root) } function listFiles(parent) { var dir = Qt.resolvedUrl(parent.filePath).toLocalFile() if (dir !== "" && dir !== "." && dir !== "..") { var fileInfos = QDir(dir).entryInfoList(QDir.AllEntries | QDir.NoDotAndDotDot, QDir.Name) for (var i = 0; i < fileInfos.length; i++) { var fileInfo = fileInfos[i] var filePath = fileInfo.absoluteFilePath() var fileName = fileInfo.fileName() var isDir = fileInfo.isDir() var icon = isDir ? "qrc:/folder.png" : "qrc:/file.png" var child = { fileName: fileName, filePath: filePath, isDir: isDir, children: [] } parent.children.push(child) if (isDir) { listFiles(child) } } } } function openFile(node) { if (!node.isDir) { Qt.openUrlExternally(node.filePath) } } // 处理双击事件 MouseArea { anchors.fill: parent onDoubleClicked: { var node = fileTreeView.currentItem.model openFile(node) } } } ``` 在上述代码中,我们使用一个自定义的`fileModel`来作为TreeView的数据模型,它是一个包含多个节点的JavaScript对象。在程序初始化,我们先添加一个根节点,并列出根目录下的所有文件和目录。在TreeViewDelegate中,我们通过递归调用的方式来显示子节点,并在双击事件中打开文件。 最后,我们需要准备一些文件图标,比如`folder.png`和`file.png`,并在QRC文件中进行注册。你可以根据自己的需求来选择合适的图标。 希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值