将C++的数据暴露给QML不成功,想在C++中创建Model,传到ListView中。各种不成功,求大神指教

亥尚 2015-02-02 05:03:59
直接代码,这是main.cpp的
#include <QGuiApplication>

#include <qqmlengine.h>
#include <qqmlcontext.h>
#include <qqml.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>

#include "dataobject.h"

/*
This example illustrates exposing a QList<QObject*> as a
model in QML
*/

//![0]
int main(int argc, char ** argv)
{
QGuiApplication app(argc, argv);

QList<QObject*> dataList;
dataList.append(new DataObject("Item 1"));
dataList.append(new DataObject("Item 2"));
dataList.append(new DataObject("Item 3"));
dataList.append(new DataObject("Item 4"));

QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("item1.ebklist.ebkmodel", QVariant::fromValue(dataList));
//![0]

view.setSource(QUrl("qrc:view.qml"));
view.show();

return app.exec();
}

就是在设置ebkmodel的时候总是不成功,QML代码如下:
Item{
id: item1
x: 0
y: 0
width: 800
height: 480
visible: true

Image {
id: image_b
visible: true
anchors.fill: parent
source: "image/bg_list.jpg"
}

Component {
id: highlight
Rectangle {
color: "lightsteelblue"
radius: 5
}
}

Component{
id: ebkdelegate

Item {
x: parent.x
width: list_ebk.width
height: 43

MouseArea{
anchors.fill: parent
// onClicked:;
}

Row {
id: row1
Rectangle {
width: list_ebk.width
height: parent.parent.height
color: "transparent"
}
}

Text {
text: name
font.bold: true
anchors.verticalCenter: parent.verticalCenter
}
}
}

ListView {
id: ebklist

x: 17
y: 119
width: 677
height: 343

delegate:ebkdelegate
spacing: 7
model: ListModel{
id: ebkmodel
}
highlight: highlight
}
}

已经搞了好几天了,新手刚开始学习,还不是从头学的,公司有需要搞点东西,直接就硬赶着上架啊。大神们帮帮忙啊!!!
...全文
215 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
彩阳 2015-02-03
  • 打赏
  • 举报
回复
引用 7 楼 u010670794 的回复:
[quote=引用 6 楼 jiangcaiyang123 的回复:] [quote=引用 5 楼 u010670794 的回复:] [quote=引用 4 楼 foruok 的回复:] Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
恩恩,你和我说的那章我看过了,看不懂啊。因为前面的都没看过啊,书的话我还是自己再瞅瞅吧。 还有,那你后面说的那个能具体点吗?你的书中有例子吗?[/quote] 看不懂不是理由,我认为安老师的书已经非常脍炙人口了。[/quote] 主要是公司要做一些东西,哪有时间给你慢慢啃一本那么厚的书啊。[/quote] 可能需要外援的帮忙了。
亥尚 2015-02-03
  • 打赏
  • 举报
回复
引用 6 楼 jiangcaiyang123 的回复:
[quote=引用 5 楼 u010670794 的回复:] [quote=引用 4 楼 foruok 的回复:] Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
恩恩,你和我说的那章我看过了,看不懂啊。因为前面的都没看过啊,书的话我还是自己再瞅瞅吧。 还有,那你后面说的那个能具体点吗?你的书中有例子吗?[/quote] 看不懂不是理由,我认为安老师的书已经非常脍炙人口了。[/quote] 主要是公司要做一些东西,哪有时间给你慢慢啃一本那么厚的书啊。
彩阳 2015-02-03
  • 打赏
  • 举报
回复
引用 5 楼 u010670794 的回复:
[quote=引用 4 楼 foruok 的回复:] Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
恩恩,你和我说的那章我看过了,看不懂啊。因为前面的都没看过啊,书的话我还是自己再瞅瞅吧。 还有,那你后面说的那个能具体点吗?你的书中有例子吗?[/quote] 看不懂不是理由,我认为安老师的书已经非常脍炙人口了。
亥尚 2015-02-03
  • 打赏
  • 举报
回复
引用 2 楼 foruok 的回复:
C++ Model不是这样用的,要从一个QAbstractItemModel或者其派生类的来继承。翻我的博客文章,或者看我的书《Qt Quick核心编程》。
我现在依照你说的,使用QAbstarctListModel重写的。但是在使用时main.qml老是报找不到delegate下的text的错误。 在代码中应该与data函数有关吧,如下,m_name是我在NameListModel中定义的QstringList。我只是想显示文件名,没别的 QVariant NameListModel::data(const QModelIndex & index, int role) const { int row = index.row(); return m_name[row]; } main.qml里面东西很少,如下: ListView { width: 200; height: 250 model: myModel delegate: Text { text: +name} } 麻烦帮看看应该怎么写吧。谢谢了。。。还需要别的代码你说,我给你贴出来。
亥尚 2015-02-03
  • 打赏
  • 举报
回复
引用 8 楼 jiangcaiyang123 的回复:
[quote=引用 7 楼 u010670794 的回复:] [quote=引用 6 楼 jiangcaiyang123 的回复:] [quote=引用 5 楼 u010670794 的回复:] [quote=引用 4 楼 foruok 的回复:] Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
恩恩,你和我说的那章我看过了,看不懂啊。因为前面的都没看过啊,书的话我还是自己再瞅瞅吧。 还有,那你后面说的那个能具体点吗?你的书中有例子吗?[/quote] 看不懂不是理由,我认为安老师的书已经非常脍炙人口了。[/quote] 主要是公司要做一些东西,哪有时间给你慢慢啃一本那么厚的书啊。[/quote] 可能需要外援的帮忙了。[/quote] 我能问你哥问题吗?在将C++的数据爆露给QML是,delegate的text应该应该怎么写啊。。。
亥尚 2015-02-02
  • 打赏
  • 举报
回复
引用 4 楼 foruok 的回复:
Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
恩恩,你和我说的那章我看过了,看不懂啊。因为前面的都没看过啊,书的话我还是自己再瞅瞅吧。 还有,那你后面说的那个能具体点吗?你的书中有例子吗?
foruok 2015-02-02
  • 打赏
  • 举报
回复
Model View那一章,有C++ Model的示例。你可以使用QDir获取文件列表,填充到Model中。
亥尚 2015-02-02
  • 打赏
  • 举报
回复
引用 2 楼 foruok 的回复:
C++ Model不是这样用的,要从一个QAbstractItemModel或者其派生类的来继承。翻我的博客文章,或者看我的书《Qt Quick核心编程》。

我手里有你那本书啊,也没那么多时间细看,只是大体搂了一眼。你能跟我说说具体看哪吗。
我现在就是想通过C++来读取固定目录下的文件名,并将其显示出来。显示窗口是一个window,有一张底图,在一个区域有一个listview显示文件名。你能说说怎么做,应该学哪里吗???
foruok 2015-02-02
  • 打赏
  • 举报
回复
C++ Model不是这样用的,要从一个QAbstractItemModel或者其派生类的来继承。翻我的博客文章,或者看我的书《Qt Quick核心编程》。
亥尚 2015-02-02
  • 打赏
  • 举报
回复
怎么没人???

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧