Qml自定义ListModel(视频)
视频 自定义 qml
2023-06-13 09:17:29 时间
❝创建C++的列表模型,并注册到Qml中使用。❞
1. 自定义ListModel
MyListModel继承于QAbstractListModel。
/* 创建一个列表模型 */
class MyListModel : public QAbstractListModel
{
Q_OBJECT
public:
MyListModel()
{
m_stringList = QStringList{"1", "2", "3"};
}
int rowCount(const QModelIndex &parent) const
{
return m_stringList.count();
}
QVariant data(const QModelIndex &index, int role) const
{
return m_stringList.at(index.row());
}
bool setData(const QModelIndex &index, const QVariant &value, int role)
{
m_stringList[index.row()] = value.toString();
emit dataChanged(index, index);
return true;
}
/* 创建数据访问的别名。(可用于Qml使用) */
QHash<int, QByteArray> roleNames() const
{
QHash<int, QByteArray> roles;
roles[Qt::UserRole] = "modelData";
return roles;
}
private:
QStringList m_stringList;
};
2. 注册到Qml中
/* 注册Qml类型 */
qmlRegisterType<MyListModel>("MyListModel", 1, 0, "MyListModel");
3. 使用
声明MyListModel到Qml中,并创建其实例MyListModel { id: myListModel }
。ListView的代理(delegate)通过设置modelData改变其myListModel
对象的QStringList内容。
import MyListModel 1.0
...
ListView {
id: listView
anchors.fill: parent
model: MyListModel { id: myListModel }
delegate: Rectangle {
width: 300
height: 100
Row {
Text {
anchors.verticalCenter: parent.verticalCenter
width: 200
text: modelData
}
Rectangle {
width: 50
height: 50
color: mouseArea.pressed ? "lightgray" : "lightblue"
Text {
anchors.centerIn: parent
/* 改变数据(随机数) */
text: "改变"
}
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
modelData = Math.random()
}
}
}
}
}
}
...
相关文章
- 桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!「建议收藏」
- 茂名工厂智能视频监控系统
- feign原理详解_vip视频解析是什么原理
- 数据仓库建模方法详解视频_三维建模流程步骤
- 语音通话视频通话界面实现,用于展示出webRTC实时聊天媒体流,CSS实现效果
- 视频监控平台GB28181:国标-注册(鉴权)
- 小程序接入视频号 自定义交易组件的接入
- 怎么用 JavaScript 构建自定义的 HTML5 视频播放器
- 视频特效制作软件AE2023中文版电脑下载安装,Adobe Ae软件下载
- 搜狐视频客户端 搜狐视频 v5.0.0 手机版去广告下载
- 马赛克一键变无码高清!Waifu2x-Extension-GUI放大图片视频
- Linux下录制精彩视频的技巧(linux录制视频)
- 「唯物视频」Yeelight智能床头灯一手体验报告:小米在文艺之路上越走越嗨
- MySQL视频教程如何上传和管理视频(mysql上传视频教程)