qml 实现最近使用文件的menu
要实现最近使用文件的菜单,可以使用QML的ListView组件来显示文件列表,并通过设置model属性绑定到一个QAbstractListModel的子类上。
首先,创建一个QAbstractListModel的子类来管理最近使用的文件列表。在这个子类中,需要定义rowCount()和data()方法来返回列表的行数和每行的数据。
class RecentFilesModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit RecentFilesModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void addFile(const QString &filePath);
private:
QStringList m_files;
};
在cpp文件中实现这些方法:
RecentFilesModel::RecentFilesModel(QObject *parent) : QAbstractListModel(parent)
{
}
int RecentFilesModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_files.size();
}
QVariant RecentFilesModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() >= m_files.size())
return QVariant();
if (role == Qt::DisplayRole)
return m_files.at(index.row());
return QVariant();
}
void RecentFilesModel::addFile(const QString &filePath)
{
beginInsertRows(QModelIndex(), 0, 0);
m_files.prepend(filePath);
endInsertRows();
}
然后,在QML文件中使用ListView来显示最近使用的文件列表。设置model属性为上述定义的RecentFilesModel的实例。通过设置delegate属性来自定义每个列表项的外观。
import QtQuick 2.0
import QtQuick.Controls 2.0
ListView {
id: listView
width: 200
height: 300
model: recentFilesModel
delegate: Item {
width: listView.width
height: 50
Rectangle {
width: parent.width
height: parent.height
color: listView.currentIndex === index ? "lightblue" : "white"
Text {
text: modelData
anchors.centerIn: parent
}
}
MouseArea {
anchors.fill: parent
onClicked: {
// 处理点击事件
}
}
}
}
在QML中,可以通过调用recentFilesModel.addFile(filePath)来添加最近使用的文件。点击列表项时,可以根据index属性来处理相应的事件
原文地址: https://www.cveoy.top/t/topic/hZrQ 著作权归作者所有。请勿转载和采集!